处理非 WCF 客户端的 WCF 错误



我创建了一个 Wcf 服务。 它将由 Wcf 客户端和非 Wcf 客户端访问。 我为错误异常处理创建了自己的类,如下所示;

[DataContract]
public class ErrorResponse
{
    [DataMember]
    public string ErrMsg {get;set;}
}

对于我的服务接口,我有

[ServiceContract]
public interface IService
{
    [OperationContract]
    [FaultContract (typeof(ErrorResponse))]
    [WebInvoke(Method = "POST", UriTemplate = "/XML/GetTypes", BodyStyle = WebMessageBodyStyle.Bare)]
    TypeResponse XMLTypes(TypeRequest TypeRequest);
}

在我的方法 XmlType 中,我有以下内容;

public static TypeResponse XmlTypes(TypeRequest TypeRequest)
{
    //do something
    //raise a error
    ErrorResponse oErrorResponse = new ErrorResponse();
    oErrorResponse.ErrMsg = "Some Error happened";
    FaultCode oFaultCode = new FaultCode("12345");
    throw new FaultException<ErrorResponse>(oErrorResponse , new FaultReason ("Reason for the fault"),
            new FaultCode("TypeRequestFailed", new FaultCode("TypeNotFound")));

这似乎适用于 Wcf 客户端。

但是,当从非 Wcf 客户端进行调用时,例如使用 WebClient UploadString(我知道我可以使用服务参考,这是出于测试目的),我回来了

System.Net.WebException: 远程服务器返回错误: (400) 错误请求。

这是我在另一个测试应用程序中的 Web 客户端代码;

WebClient oClient = new WebClient();
oClient.Encoding = UTF8Encoding.UTF8;
oClient.Headers.Add("Content-Type", "application/xml");
try 
{
   txtResponse.Clear();
   sRequest = "<TypeRequest><UserId>1</UserId><Password>asdax12</Password></TypeRequest>";
   txtResponse.Text = oClient.UploadString("http://localhost:49562/Service.svc/XML/XmlTypes", "POST", sRequest).ToString();
}
catch (Exception ex)
{
    txtResponse.Text = ex.ToString();
}

在我的 webconfig 文件中,我添加了以下内容,取自此示例,为非 wcf 客户端抛出 soap 错误

<system.serviceModel>
  <bindings>
    <customBinding>
      <binding name="basicHttpSoap12Binding">
        <textMessageEncoding messageVersion="Soap12"/>
        <httpTransport/>
      </binding>
    </customBinding>
  </bindings>
  <services>
    <service name="MySoap12Service">
      <endpoint address="" binding="customBinding" bindingConfiguration="basicHttpSoap12Binding"
        bindingNamespace="MySoap12ServiceNamespace"
        contract="MySoap12Service">
      </endpoint>
    </service>
  </services>
</system.serviceModel>

我哪里做错了?

您还有其他可以成功调用的 Web 方法吗?(来自同一非 WCF 客户端)

由于您有一个 400 http 错误,在我看来,调用没有以正确的方式构建或完成,因此,如果您可以在同一服务中成功调用任何其他方法,这将有助于我们确保调用正确。

相关内容

  • 没有找到相关文章

最新更新