Tôi cũng đã đặt câu hỏi này trên Mirth forum.Máy khách Java JAX-WS, khả năng tương thích dịch vụ WCF: "400: Yêu cầu Xấu"
Chúng tôi hiện đang cố gắng kết nối với dịch vụ WCF bằng công cụ tích hợp chăm sóc sức khỏe nguồn mở Mirth. Mirth là dựa trên Java, sử dụng Mule nội bộ sử dụng JAX-WS. Máy chủ WCF trả lại mã trạng thái HTTP "400: Yêu cầu không hợp lệ". Chúng tôi không có quyền truy cập dễ dàng vào máy chủ WCF.
Giao tiếp với khách hàng hoạt động tốt trong C#. Trong Visual Studio, thêm dịch vụ tham khảo, và sau đó trong main():
PatientRegistryQueryFulfiller.GetDemographicsClient svc = new PatientRegistryQueryFulfiller.GetDemographicsClient();
doc.Load(@"C:\MirthTesting\PRPA_EX201307NO_10_PatientReg_GetDemographics.xml");
PatientRegistryQueryFulfiller.PRPA_IN201307NO patientRegistryRequest = (PatientRegistryQueryFulfiller.PRPA_IN201307NO)ObjectSerializer.DeserializeObject(doc, typeof(PatientRegistryQueryFulfiller.PRPA_IN201307NO));
PatientRegistryQueryFulfiller.PRPA_IN201307NOResponse patientRegistryResponse = svc.GetDemographics(patientRegistryRequest);
doc = ObjectSerializer.SerializeObject(patientRegistryResponse.Item);
Các WCF client autogenerated (từ WSDL) có app.config với một thiết bị đầu cuối, và điều này ràng buộc:
<bindings>
<basicHttpBinding>
<binding name="PatientRegistryQueryFulfiller_Binding" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="655360"
maxBytesPerRead="4096" maxNameTableCharCount="655360" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
Điều duy nhất được thực hiện khác nhau trong giải pháp WCF là mở rộng maxNameTableCharCount và maxArrayLength trong thẻ readerQuotas cho ràng buộc trong câu hỏi, phần còn lại được để lại với các giá trị mặc định. Tuy nhiên, tôi đã không tìm thấy một cách để thiết lập chúng trong Mirth, nên đây thực sự là lý do cho lỗi.
Chúng tôi đang chạy Mirth v 2.2.1 (lần thanh toán gần đây nhất) và Kênh Mirth được đặt thành cả đọc và gửi tài liệu HL7v3. Vấn đề phát sinh chỉ khi cố gắng giao tiếp với WCF-dịch vụ. Điểm đến là một Người gửi dịch vụ web, với cả dịch vụ và cổng được đọc từ WSDL. Không có authenthication, và phong bì được tạo ra từ các hoạt động chỉ có sẵn. Chúng tôi không sử dụng MTOM.
Chúng tôi khá chắc chắn rằng điều này liên quan đến khả năng tương tác JAX-WS và WCF. Bất kỳ gợi ý chung nào?
Chúng tôi đã thử đặt thuộc tính trên kết nối JAX-WS. Sâu trong lòng reo vui, chúng tôi đã cố gắng thiết lập kích thước http đoạn:. dispatch.getRequestContext() đặt (JAXWSProperties.HTTP_CLIENT_STREAMING_CHUNK_SIZE, 8192) (WebServiceMessageDispatcher.Java dòng 140)
Các vết đống là như sau:
ERROR-410: Web Service Connector error
ERROR MESSAGE: Error connecting to web service.
com.sun.xml.internal.ws.client.ClientTransportException: The server sent HTTP status code 400: Bad Request
at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.checkStatusCode(Unknown Source)
at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(Unknown Source)
at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.processRequest(Unknown Source)
at com.sun.xml.internal.ws.transport.DeferredTransportPipe.processRequest(Unknown Source)
at com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Unknown Source)
at com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Unknown Source)
at com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Unknown Source)
at com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Unknown Source)
at com.sun.xml.internal.ws.client.Stub.process(Unknown Source)
at com.sun.xml.internal.ws.client.dispatch.DispatchImpl.doInvoke(Unknown Source)
at com.sun.xml.internal.ws.client.dispatch.DispatchImpl.invoke(Unknown Source)
at com.mirth.connect.connectors.ws.WebServiceMessageDispatcher.processMessage(WebServiceMessageDispatcher.java:176)
at com.mirth.connect.connectors.ws.WebServiceMessageDispatcher.doDispatch(WebServiceMessageDispatcher.java:106)
at com.mirth.connect.connectors.ws.WebServiceMessageDispatcher.doSend(WebServiceMessageDispatcher.java:204)
at org.mule.providers.AbstractMessageDispatcher.send(AbstractMessageDispatcher.java:164)
at org.mule.impl.MuleSession.sendEvent(MuleSession.java:191)
at org.mule.impl.MuleSession.sendEvent(MuleSession.java:130)
at org.mule.routing.outbound.AbstractOutboundRouter.send(AbstractOutboundRouter.java:85)
at org.mule.routing.outbound.FilteringMulticastingRouter.route(FilteringMulticastingRouter.java:54)
at org.mule.routing.outbound.OutboundMessageRouter$1.doInTransaction(OutboundMessageRouter.java:78)
at org.mule.transaction.TransactionTemplate.execute(TransactionTemplate.java:48)
at org.mule.routing.outbound.OutboundMessageRouter.route(OutboundMessageRouter.java:82)
at org.mule.impl.model.DefaultMuleProxy.onCall(DefaultMuleProxy.java:247)
at org.mule.impl.model.seda.SedaComponent.doSend(SedaComponent.java:209)
at org.mule.impl.model.AbstractComponent.sendEvent(AbstractComponent.java:277)
at org.mule.impl.MuleSession.sendEvent(MuleSession.java:201)
at org.mule.routing.inbound.InboundMessageRouter.send(InboundMessageRouter.java:176)
at org.mule.routing.inbound.InboundMessageRouter.route(InboundMessageRouter.java:143)
at org.mule.providers.AbstractMessageReceiver$DefaultInternalMessageListener.onMessage(AbstractMessageReceiver.java:487)
at org.mule.providers.AbstractMessageReceiver.routeMessage(AbstractMessageReceiver.java:266)
at org.mule.providers.AbstractMessageReceiver.routeMessage(AbstractMessageReceiver.java:225)
at com.mirth.connect.connectors.vm.VMMessageReceiver.getMessages(VMMessageReceiver.java:223)
at org.mule.providers.TransactedPollingMessageReceiver.poll(TransactedPollingMessageReceiver.java:108)
at org.mule.providers.PollingMessageReceiver.run(PollingMessageReceiver.java:97)
at org.mule.impl.work.WorkerContext.run(WorkerContext.java:290)
at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1061)
at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:575)
at java.lang.Thread.run(Unknown Source)
Có không có cách nào bạn có thể nhận được một bản sao của cấu hình của dịch vụ? –
Một ý nghĩ khác là loại bỏ tất cả các bit cấu hình không cần thiết và chỉ cần cấu hình những thứ bạn BIẾT mà bạn cần. Các tệp cấu hình được tạo tự động không cần thiết. Có lẽ sẽ không giải quyết vấn đề, nhưng có thể giúp đỡ anyway. –