2017-02-17 128 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服务。 –