2017-02-17 9 views
0

私は非常に基本的なWCFサービスを持っています。SaveSchoolName(string SchoolName)というメソッドがあり、基本的には操作が良好であればTrueのブール値として返します。 。 私は私のクライアントアプリケーションにサービス参照を追加し、次のようにサービスを消費している:C#WCFサービスステータスコードを取得

MyService.WebServicesClient svc = new MyService.WebServicesClient(); 
bool dataSaved = false; 
dataSaved = svc.SaveSchoolName("School Name"); 

if(dataSaved){ 
    // do something. 
} 
else{ 
    // log not saved. 
} 

私はHTTPステータスコード(200 - OK)を決定しない方法を知りたいWCFサービスの呼び出しのために。私は検索しようとしたが、どれも、メソッドを呼び出すレスポンスヘッダーを取得する方法についての詳細情報は提供していないようだ。

答えて

0

このためにクライアントメッセージインスペクタを作成する必要があります。

以下のコードをチェックして、クライアントにインスペクタを追加するだけです。ところで、明らかにこれはHTTPのためだけに機能します:)

public class HttpStatusCodeMessageInspector : IClientMessageInspector 
{ 
    public void AfterReceiveReply(ref Message reply, object correlationState) 
    { 
     if (reply.Properties.ContainsKey(HttpResponseMessageProperty.Name)) 
     { 
      var httpResponseProperty = (HttpResponseMessageProperty)reply.Properties[HttpResponseMessageProperty.Name]; 
      Console.WriteLine($"Response status is {(int)httpResponseProperty.StatusCode}"); 
     } 
    } 

    public object BeforeSendRequest(ref Message request, IClientChannel channel) 
    { 
     return null; 
    } 
} 
+0

あなたはHTTPでしか動作しないと言いましたが、HTTPSではうまくいかないと言いますか?また、このメッセージインスペクタはどこで呼び出されますか? –

+0

いいえ、私はHTTPプロトコルを意味しました。つまり、HTTP/HTTPS/WebSocketsで動作します。どのように呼び出すかについては、エンドポイントの振る舞いを使ってクライアントのchannelFactoryにメッセージインスペクタを追加する必要があります。これは、クライアントがサーバーからの応答を受け取るたびに自動的に実行されます。 –

+0

あなたが提供したコードをどこに追加するのかちょっと混乱します。私は実際にコードの背後からWebサービスを消費しています。 –

関連する問題