2016-06-13 174 views
0

提供了故障状态我有一个WCF服务,我打电话方式如下:为WCF服务

MyService client = new MyService(); 
bool result = client.MyServiceMethod(param1, param2); 

可变结果设置为true或false指示成功或失败。在成功的情况下,这是明确的,但在失败的情况下,我需要得到一些失败的细节。

从我的服务,我用

OutgoingWebResponseContext response = WebOperationContext.Current.OutgoingResponse; 
response.StatusCode = HttpStatusCode.BadRequest; 
response.StatusDescription = "Invalid parameter."; 
return false; 

我的问题是我如何检索响应描述是正确的方式来提供故障反馈?

回答

0

IMO最好是定义一个自定义类,你再从返回你的方法。这个类将包含任何错误的细节。你使用DataContracts来做到这一点。

一个简单的例子可能是这样的......

[ServiceContract] 
public interface IMyContract 
{ 
    [OperationContract] 
    MyResult DoSomething(); 
} 

[DataContract] 
public class MyResult 
{ 
    [DataMember] 
    public bool IsSuccess { get; set; } 

    [DataMember] 
    public string ErrorDetails { get; set; } 
} 


public class MyService : IMyContract 
{ 
    public MyResult DoSomething() 
    { 
     try 
     { 
      return new MyResult { IsSuccess = true }; 
     } 
     catch 
     { 
      return new MyResult { IsSuccess = false, ErrorDetails = "Bad things" }; 
     } 
    } 
} 

编辑:包括耗时根据注释代码。

var client = new MyService(); 
var results = client.DoSomething(); 

if (results.IsSuccess) 
{ 
    Console.WriteLine("It worked"); 
} 
else 
{ 
    Console.WriteLine($"Oops: {results.ErrorDetails}"); 
} 
+0

我该如何从调用程序中检索细节? 对象结果= client.MyServiveMethod(param1,param2);将不起作用 – ElenaDBA

+0

为发布添加了详细信息。如果您有任何问题,请告诉我。 –

0

通常您使用SOAP MSDN:Faults向客户端传达问题。故障的特殊优势是WCF将确保您的通道在收到故障消息后保持打开状态。默认情况下,该服务不会发送任何解释发生的信息。 WCF不会透露有关该服务在内部执行的操作的详细信息。有关更多详细信息,请参阅MSDN:Specifying and Handling Faults in Contracts and Services。另请参阅SO:What exception type should be thrown with a WCF Service?

出于调试的目的,您可以添加ServiceDebug行为,并设置IncludeExceptionDetailInFaults为true,以获取堆栈跟踪(在非生产环境)