当出现故障合同时,我在为WCF服务创建客户端时遇到问题。
当我把错误契约,客户端无法实例化时,它只能看到WPCILServiceException对象和WPCILEndResponse对象。
下面是服务的工作代码,没有错误合同:
namespace WcfS001
{
[ServiceContract]
public interface IS001
{
[OperationContract]
WPCILEndResponse GetMasterListDebug(string xml);
[OperationContract]
WPCILEndResponse GetMasterListWpc(S001_WPC_Input input);
}
}
当我使用Windows Form创建客户端时,我创建了一个调用此服务的按钮,如下所示:
private void button1_Click(object sender, EventArgs e)
{
if (!String.IsNullOrEmpty(textBoxInput.Text))
{
S001Service.S001Client clientConnection = new S001Service.S001Client();
try
{
S001Service.WPCILEndResponse response = clientConnection.GetMasterListDebug(textBoxInput.Text);
textBoxCorrId.Text = response._correlationId;
textBoxService.Text = response._service;
}
catch (Exception ex)
{
textBoxEx.Text = ex.Message;
}
}
else
{
MessageBox.Show("Input textbox is empty!");
}
}
我可以毫无问题地看到“S001Service.S001Client”。
但是,当我添加如下的故障合同时,“S001Service.S001Client”不再存在,即使在对象浏览器中也看不到它。我只能看到异常对象类型!
namespace WcfS001
{
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IS001" in both code and config file together.
[ServiceContract]
public interface IS001
{
[OperationContract]
[FaultContract(typeof(WPCILServiceException))]
WPCILEndResponse GetMasterListDebug(string xml);
[OperationContract]
[FaultContract(typeof(WPCILServiceException))]
WPCILEndResponse GetMasterListWpc(S001_WPC_Input input);
}
}
所以下面的代码不再起作用了
private void button1_Click(object sender, EventArgs e)
{
if (!String.IsNullOrEmpty(textBoxInput.Text))
{
**//S001Client doesn't exists anymore - why???
S001Service.S001Client clientConnection = new S001Service.S001Client();**
try
{
S001Service.WPCILEndResponse response = clientConnection.GetMasterListDebug(textBoxInput.Text);
textBoxCorrId.Text = response._correlationId;
textBoxService.Text = response._service;
}
catch (Exception ex)
{
textBoxEx.Text = ex.Message;
}
}
else
{
MessageBox.Show("Input textbox is empty!");
}
}
好像我的客户端无法读取正确的WSDL(附在下面):
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:tns="http://tempuri.org/" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex" xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" name="S001" targetNamespace="http://tempuri.org/">
<wsdl:types>
<xsd:schema targetNamespace="http://tempuri.org/Imports">
<xsd:import schemaLocation="http://localhost:5006/S001.svc?xsd=xsd0" namespace="http://tempuri.org/"/>
<xsd:import schemaLocation="http://localhost:5006/S001.svc?xsd=xsd3" namespace="http://schemas.datacontract.org/2004/07/CustomILException"/>
<xsd:import schemaLocation="http://localhost:5006/S001.svc?xsd=xsd1" namespace="http://schemas.microsoft.com/2003/10/Serialization/"/>
<xsd:import schemaLocation="http://localhost:5006/S001.svc?xsd=xsd2" namespace="http://schemas.datacontract.org/2004/07/ModelsInputOutput.WPCILEndResponse"/>
<xsd:import schemaLocation="http://localhost:5006/S001.svc?xsd=xsd4" namespace="http://schemas.datacontract.org/2004/07/System"/>
<xsd:import schemaLocation="http://localhost:5006/S001.svc?xsd=xsd5" namespace="http://schemas.datacontract.org/2004/07/S001InputWpc"/>
<xsd:import schemaLocation="http://localhost:5006/S001.svc?xsd=xsd6" namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/>
</xsd:schema>
</wsdl:types>
<wsdl:message name="IS001_GetMasterListDebug_InputMessage">
<wsdl:part name="parameters" element="tns:GetMasterListDebug"/>
</wsdl:message>
<wsdl:message name="IS001_GetMasterListDebug_OutputMessage">
<wsdl:part name="parameters" element="tns:GetMasterListDebugResponse"/>
</wsdl:message>
<wsdl:message name="IS001_GetMasterListDebug_WPCILServiceExceptionFault_FaultMessage">
<wsdl:part xmlns:q1="http://schemas.datacontract.org/2004/07/CustomILException" name="detail" element="q1:WPCILServiceException"/>
</wsdl:message>
<wsdl:message name="IS001_GetMasterListWpc_InputMessage">
<wsdl:part name="parameters" element="tns:GetMasterListWpc"/>
</wsdl:message>
<wsdl:message name="IS001_GetMasterListWpc_OutputMessage">
<wsdl:part name="parameters" element="tns:GetMasterListWpcResponse"/>
</wsdl:message>
<wsdl:message name="IS001_GetMasterListWpc_WPCILServiceExceptionFault_FaultMessage">
<wsdl:part xmlns:q2="http://schemas.datacontract.org/2004/07/CustomILException" name="detail" element="q2:WPCILServiceException"/>
</wsdl:message>
<wsdl:portType name="IS001">
<wsdl:operation name="GetMasterListDebug">
<wsdl:input wsaw:Action="http://tempuri.org/IS001/GetMasterListDebug" message="tns:IS001_GetMasterListDebug_InputMessage"/>
<wsdl:output wsaw:Action="http://tempuri.org/IS001/GetMasterListDebugResponse" message="tns:IS001_GetMasterListDebug_OutputMessage"/>
<wsdl:fault wsaw:Action="http://tempuri.org/IS001/GetMasterListDebugWPCILServiceExceptionFault" name="WPCILServiceExceptionFault" message="tns:IS001_GetMasterListDebug_WPCILServiceExceptionFault_FaultMessage"/>
</wsdl:operation>
<wsdl:operation name="GetMasterListWpc">
<wsdl:input wsaw:Action="http://tempuri.org/IS001/GetMasterListWpc" message="tns:IS001_GetMasterListWpc_InputMessage"/>
<wsdl:output wsaw:Action="http://tempuri.org/IS001/GetMasterListWpcResponse" message="tns:IS001_GetMasterListWpc_OutputMessage"/>
<wsdl:fault wsaw:Action="http://tempuri.org/IS001/GetMasterListWpcWPCILServiceExceptionFault" name="WPCILServiceExceptionFault" message="tns:IS001_GetMasterListWpc_WPCILServiceExceptionFault_FaultMessage"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="BasicHttpBinding_IS001" type="tns:IS001">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="GetMasterListDebug">
<soap:operation soapAction="http://tempuri.org/IS001/GetMasterListDebug" style="document"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="WPCILServiceExceptionFault">
<soap:fault name="WPCILServiceExceptionFault" use="literal"/>
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="GetMasterListWpc">
<soap:operation soapAction="http://tempuri.org/IS001/GetMasterListWpc" style="document"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="WPCILServiceExceptionFault">
<soap:fault name="WPCILServiceExceptionFault" use="literal"/>
</wsdl:fault>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="S001">
<wsdl:port name="BasicHttpBinding_IS001" binding="tns:BasicHttpBinding_IS001">
<soap:address location="http://localhost:5006/S001.svc"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
我从来没有使用过错合同......我错过了什么吗?
谢谢