2010-07-21 2 views
3

Я создал java-клиент для использования службы WCF с использованием оси 1.4. Если я использую BasicHttpBinding, чем все работает отлично, но если я использую WsHttpBinding, чем я получаю следующее сообщение об ошибке: -Как создать java-клиент с использованием AXis 1.4 для использования службы WCF с помощью wsHttpBinding

Did not understand "MustUnderstand" header(s):{http://www.w3.org/2005/08/addressing}Action 
AxisFault 
faultCode: {http://www.w3.org/2003/05/soap-envelope}MustUnderstand 
faultSubcode: 
faultString: Did not understand "MustUnderstand" header(s):{http://www.w3.org/2005/08/addressing}Action 
faultActor: 
faultNode: 
faultDetail: 
    {http://xml.apache.org/axis/}stackTrace: 
    at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:96) 
    at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206) 
    at org.apache.axis.client.Call.invokeEngine(Call.java:2784) 
    at org.apache.axis.client.Call.invoke(Call.java:2767) 
    at org.apache.axis.client.Call.invoke(Call.java:2443) 
    at org.apache.axis.client.Call.invoke(Call.java:2366) 
    at org.apache.axis.client.Call.invoke(Call.java:1812) 
    at org.tempuri.WSHttpBinding_IService1Stub.getData(WSHttpBinding_IService1Stub.java:171) 
    at Mytes.main(Mytes.java:14) 

    {http://xml.apache.org/axis/}hostname:2207A-H7-SITA 

Did not understand "MustUnderstand" header(s):{http://www.w3.org/2005/08/addressing}Action 
    at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:96) 
    at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206) 
    at org.apache.axis.client.Call.invokeEngine(Call.java:2784) 
    at org.apache.axis.client.Call.invoke(Call.java:2767) 
    at org.apache.axis.client.Call.invoke(Call.java:2443) 
    at org.apache.axis.client.Call.invoke(Call.java:2366) 
    at org.apache.axis.client.Call.invoke(Call.java:1812) 
    at org.tempuri.WSHttpBinding_IService1Stub.getData(WSHttpBinding_IService1Stub.java:171) 
    at Mytes.main(Mytes.java:14) 

Pls дайте мне знать, как я могу решить эту ошибку. Благодарю.

ответ

-2

BasicHttpBinding или webHttpBinidng (службы REST) ​​- единственный вариант для взаимодействия с технологиями, отличными от Microsoft. BasicHttpBinding является связующим, который поддерживает базовый профиль 1.1 для взаимодействия.

Просьба ознакомиться с приведенными ниже ссылками и посмотреть, могут ли они помочь вам понять основные проблемы и взломать.

http://www.devproconnections.com/article/net-framework2/choosing-the-right-web-service-binding.aspx

http://geekswithblogs.net/claeyskurt/archive/2008/04/22/121508.aspx

+1

Ws-security не является технологией Microsoft, и определенно можно использовать службу WCF, которая использует wsHttpBinding – diggingforfire

+0

. Ответ выше объясняет, как вы могли бы настроить клиенту оси и заставить его работать с привязкой wsHttp – Dhawalk

3

При использовании оси для создания прокси-сервера для службы WCF, он генерирует заглушку, которая автоматически устанавливает MustUnderstand заголовка http://www.w3.org/2005/08/addressing

ниже код сбрасывает флаг MustUnderstand назад к ложному. для вызываемого метода. У меня была аналогичная проблема сегодня и был в состоянии решить с помощью кода, который размещен здесь

//maybe someother service stub,i show you a case 
    CommentWcfServiceLocator locator =new CommentWcfServiceLocator(); 
    WSHttpBinding_ICommentServiceStub stub; 
    try {  
    //get a stub and set service url 
    stub = (WSHttpBinding_ICommentServiceStub) locator.getWSHttpBinding_ICommentService(new   java.net.URL("http://www.google.com/CommentWcfService.svc")); 

    // the key is here , importantest!!! follow this 
    // set action, action path,you can find in your java code 
    SOAPHeaderElement action = new SOAPHeaderElement(new QName("wsa:Action"),  "http://tempuri.org/ICommentService/GetCommentSummaryByHotelId"); 
    SOAPHeaderElement to = new SOAPHeaderElement(new QName("wsa:To"), 
    stub._getProperty(javax.xml.rpc.Stub.ENDPOINT_ADDRESS_PROPERTY)); 
     action.setActor(null); 
     action.setNamespaceURI("http://www.w3.org/2005/08/addressing"); 
     to.setActor(null); 
     to.setNamespaceURI("http://www.w3.org/2005/08/addressing"); 
     // set header 
       stub.setHeader(action); 
     stub.setHeader(to); 
       // must set this property 
     stub._setProperty(Call.CHECK_MUST_UNDERSTAND, Boolean.FALSE); 
      stub.getCommentSummaryByHotelId("","02201158", 0); 
    } 
catch(Exception EX){} 

Я нашел this post на MustUnderstand Veru полезно.

+0

вместе с вашим ответом. очень информативная ссылка о том, почему это должно быть сделано http://wso2.com/library/tutorials/understand-famous-did-not-understand-mustunderstand-header-s-error/ – Dhawalk

+0

Спасибо за вашу информацию – vincent

Смежные вопросы