2017-01-11 6 views
0

提供されたWSDLファイルからWCFサービスリファレンスを作成しました。 C#で、私は基本的な結合でプロキシクライアントのインスタンスを作成し、必要なメソッドと呼ばれてきました:Webサービスコールエラー

:i「はgetNewOrderNumber」メソッドを呼び出すとき残念ながら、私はかなり役に立たないエラーを受信して​​い

public static bool main() 
    { 
     Debugger.Launch(); 
     var binding = new BasicHttpsBinding(); 

     binding.Security.Mode = BasicHttpsSecurityMode.Transport; 
     binding.TextEncoding = System.Text.Encoding.UTF8; 

     var remoteAddress = new System.ServiceModel.EndpointAddress("https://tester.mysite.de:8443/webservice/OrderNumber"); 

     using (var orderNumberClient = new orderNumberClient(new System.ServiceModel.BasicHttpBinding(BasicHttpSecurityMode.Transport), remoteAddress)) 
     { 
      string IDSystem = "123"; 
      string IDOSystem = "abc"; 

      //set timeout 
      orderNumberClient.Endpoint.Binding.SendTimeout = new TimeSpan(0, 0, 0, 10000); 
      orderNumberClient.ClientCredentials.UserName.UserName = "test"; 
      orderNumberClient.ClientCredentials.UserName.Password = "test"; 

      //call web service method 
      string productResponse = orderNumberClient.getNewOrderNumber(IDSystem, "01", IDOSystem); ; 

      MessageBox.Show(productResponse); 
     } 

     return true; 
    } 

System.Reflection.TargetInvocationException:Ein Aufrufziel hatAusnahmefehler verursacht。 ---> System.ServiceModel.FaultException: WebServiceの処理例外

サーバースタックトレース:

BEI System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime 操作、ProxyRpc & RPC)

System.ServiceModel.Channels.ServiceChannel.Call(Stringアクション、 ブール一行、ProxyOperationRuntime操作、Object [] ins、 オブジェクト[]、タイムアウトタイムアウト)

BEI System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCallで、ProxyOperationRuntime操作)

...

ことがSOAPUIで正常に動作としてそれは、Webサービス側のエラーではありません拘束力に欠けているかもしれませんか?

ウェブサービスに関する知識が豊富であれば、根本的な原因を明らかにできればうれしいです。

+0

私はこれはかなりあいまいな例外であることに同意します。私は、この特定の人がより有用な内なる例外を持つべきだと信じています。注:いくつかのレイヤーを深くネストすることができます。あなたはもうあなたがいなくなるまで、内部の例外をチェックしてください。 – Vahlkron

+0

内部の例外には何も見えませんでした。(幸いなことに、私はクライアントから、必要なヘッダーが見つからなかったことがわかりました!私は回答を投稿します。 –

答えて

0

私はコールで「認証」ヘッダーを送信していないことが判明しました。この問題を克服するために、私は、実際のWebサービスメソッドの呼び出しを行う前に、プロキシインスタンス内部チャネルに必要なHttpRequestMessagePropertyを追加するOperationContextScopeクラスを使用:

   using (OperationContextScope scope = new OperationContextScope(orderNumberClient.InnerChannel)) 
       { 
        var httpRequestProperty = new HttpRequestMessageProperty(); 
        httpRequestProperty.Headers[System.Net.HttpRequestHeader.Authorization] = "Basic " + 
        Convert.ToBase64String(Encoding.ASCII.GetBytes(orderNumberClient.ClientCredentials.UserName.UserName + ":" + 
        orderNumberClient.ClientCredentials.UserName.Password)); 
        OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = httpRequestProperty; 

        string Response = orderNumberClient.getNewOrderNumber(IDSystem, "01", IDOSystem); 
       } 
関連する問題