2011-01-18 8 views
2

誰でもCXFからWCF(Soap 1.2)Webサービスを呼び出す方法を知っていますか?CXF Webサービスクライアントを使用してWCF Soap 1.2 Webサービスを使用するにはどうすればよいですか?

私は基本的なhello worldのクライアントをしばらく稼働させようとしてきましたが、私は運がなかったのです。

Soap 1.1では正常に動作します。

SoapBindingを印刷するときに、クライアントがsoap 1.2サービスであってもsoap 1.1を使用しています。 soap bindingを手動で1.2に設定すると、Webサービス呼び出し時にフリーズしてしまいます。ソケットタイムアウト例外(読み取りタイムアウト)。

public static void main(String[] args) { 
     JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); 
     factory.setServiceClass(ITest.class); 
     factory.setAddress("http://localhost/Test/test.svc"); 
     final Soap12 soap12 = Soap12.getInstance(); 

     BindingConfiguration config = new BindingConfiguration() { 

      @Override 
      public String getBindingId() { 
       return soap12.getBindingId(); 
      } 
     }; 
     factory.setBindingConfig(config); 
     factory.setBindingId(soap12.getBindingId());   
     ITest service = (ITest) factory.create(); 

     org.apache.cxf.endpoint.Client client = ClientProxy.getClient(service); 
     client.getRequestContext().put("ContentType", "text/xml; charset=utf-8"); 
     SoapBinding binding = (SoapBinding) client.getEndpoint().getBinding(); 
     System.out.println("[" + binding.getSoapVersion() + "]"); 
     System.out.println(service.test("World")); 
    } 

これはWCFサービスに送信されるSOAPリクエストです。

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"> 
<soap:Body> 
<Test xmlns="http://tempuri.org/" xmlns:ns2="http://schemas.microsoft.com/2003/10/Serialization/"> 
<s>World</s> 
</Test> 
</soap:Body> 
</soap:Envelope> 
+0

私はこの問題がWCFに何らかのセキュリティを期待していると考えていると思います。 – ScArcher2

+0

サーバー側のログに役立つものはありますか? (もしそうでなければ、ログレベルを最も詳細なものに変えると便利なことはありますか?:-)) –

+0

CXFはwsHttpBindingを使用するSoap 1.2 WCFサービスの呼び出しをサポートしていません。それを答えに入れたいなら、私はそれを受け入れます。 – ScArcher2

答えて

0

私は実際にwsHttpBindingを使用するSOAP 1.2 WCFサービスの呼び出しをサポートしませんCXFを見つけました。私はBasicHttpBindingを使用するようにWCF Webサービスを切り替えました。

0

私は、WCFとCXFの間の通信に関するあなたの主な問題は、要求に存在するwsアドレス指定ヘッダーがないことです。 wsHttpBindingを有効にすると、WCFはwsアドレッシングを認識するクライアントを必要とします。これはCXFの機能ですが、有効にする必要があります。次のコードで問題を解決する必要があります。

// add the ws-addressing feature on the proxy factory. 
factory.getFeatures().add(new org.apache.cxf.ws.addressing.WSAddressingFeature()); 

このソリューションはCXF 3.xで動作します。

関連する問題