我正在使用Visual Studio 2010,.Net4,Silverlight(4.0.50826.0)。
我创建了一个WCF服务,我正在尝试使用SlSvcUtil创建代理,如:
SlSvcUtil.exe /serializer:DataContractSerializer http://192.128.09.26:8080/Server?wsdl /out:C:\Projets\Client\dService.cs /config:C:\Projets\Client\ServiceReferences.ClientConfig
当我添加一些客户类型的方法并且他们有一些属性我得到了这个消息:
警告:命名空间中的可选WSDL扩展元素“body” “http://schemas.xmlsoap.org/wsdl/soap/”未得到处理。
的XPath: // WSDL:定义[@targetNamespace = 'http://tempuri.org/'] / WSDL:结合[@ 名称= BasicHttpBinding_IService'] / WSDL:操作[@名称= 'GetDefinitionsHavingFre'] / WSDL:输出
如果我忽略警告并尝试使用该类,则在调用任何方法时会出现NullException错误。
如果我更改选项/Serializer:XmlSerializer
或任何其他选项它可能正确创建代理但我在visual studio中获得了很多空引用,因此必须添加正确的.dll。
如果我从Silverlight添加:System.ServiceModel
- 来自.NET的xmlserializerformatattribute不存在System.ServiceModel
- ChannelBase不存在
如果我没有使用客户方法我的服务工作正常,那么当使用客户类型或具有属性的方法时,我的问题是银色有一些限制吗?
有人知道如何解决这个问题?
谢谢,
WSDL:
<?xml version="1.0" encoding="utf-8" ?>
- <wsdl:definitions name="TestService" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:tns="http://tempuri.org/" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex">
- <wsdl:types>
- <xsd:schema targetNamespace="http://tempuri.org/Imports">
<xsd:import schemaLocation="http://192.128.09.26:8080/Server?xsd=xsd0" namespace="http://tempuri.org/" />
<xsd:import schemaLocation="http://192.128.09.26:8080/Server?xsd=xsd1" namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
<xsd:import schemaLocation="http://192.128.09.26:8080/Server?xsd=xsd10" namespace="http://schemas.datacontract.org/2004/07/DataCompany.Data.Faults" />
<xsd:import schemaLocation="http://192.128.09.26:8080/Server?xsd=xsd2" namespace="http://schemas.datacontract.org/2004/07/DataCompany.Data.PortalModel" />
<xsd:import schemaLocation="http://192.128.09.26:8080/Server?xsd=xsd3" namespace="http://schemas.datacontract.org/2004/07/System.Data.Objects.DataClasses" />
<xsd:import schemaLocation="http://192.128.09.26:8080/Server?xsd=xsd4" namespace="http://schemas.datacontract.org/2004/07/System.Data" />
<xsd:import schemaLocation="http://192.128.09.26:8080/Server?xsd=xsd5" namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />
<xsd:import schemaLocation="http://192.128.09.26:8080/Server?xsd=xsd6" namespace="http://schemas.datacontract.org/2004/07/DataCompany.Data.Components" />
<xsd:import schemaLocation="http://192.128.09.26:8080/Server?xsd=xsd7" namespace="http://schemas.datacontract.org/2004/07/System" />
<xsd:import schemaLocation="http://192.128.09.26:8080/Server?xsd=xsd8" namespace="http://schemas.datacontract.org/2004/07/DataCompany.Data" />
<xsd:import schemaLocation="http://192.128.09.26:8080/Server?xsd=xsd9" namespace="http://schemas.datacontract.org/2004/07/DataCompany.Data.LocalizationManagement" />
</xsd:schema>
</wsdl:types>
- <wsdl:message name="ITestService_StatusService_InputMessage">
<wsdl:part name="parameters" element="tns:StatusService" />
</wsdl:message>
- <wsdl:message name="ITestService_StatusService_OutputMessage">
<wsdl:part name="parameters" element="tns:StatusServiceResponse" />
</wsdl:message>
- <wsdl:message name="ITestService_getData_InputMessage">
<wsdl:part name="parameters" element="tns:getData" />
</wsdl:message>
- <wsdl:message name="ITestService_getData_OutputMessage">
<wsdl:part name="parameters" element="tns:getDataResponse" />
</wsdl:message>
- <wsdl:message name="ITestService_getTime_InputMessage">
<wsdl:part name="parameters" element="tns:getTime" />
</wsdl:message>
- <wsdl:message name="ITestService_getTime_OutputMessage">
<wsdl:part name="parameters" element="tns:getTimeResponse" />
</wsdl:message>
- <wsdl:message name="ITestService_getText_InputMessage">
<wsdl:part name="parameters" element="tns:getText" />
</wsdl:message>
- <wsdl:message name="ITestService_getText_OutputMessage">
<wsdl:part name="parameters" element="tns:getTextResponse" />
</wsdl:message>
- <wsdl:message name="ITestService_SaveEntity_InputMessage">
<wsdl:part name="parameters" element="tns:SaveEntity" />
</wsdl:message>
- <wsdl:message name="ITestService_SaveEntity_OutputMessage">
<wsdl:part name="parameters" element="tns:SaveEntityResponse" />
</wsdl:message>
- <wsdl:message name="ITestService_SaveEntity_DatabaseFaultFault_FaultMessage">
<wsdl:part name="detail" element="q1:DatabaseFault" xmlns:q1="http://schemas.datacontract.org/2004/07/DataCompany.Data.Faults" />
</wsdl:message>
- <wsdl:portType name="ITestService">
- <wsdl:operation name="StatusService">
<wsdl:input wsaw:Action="http://tempuri.org/ITestService/StatusService" message="tns:ITestService_StatusService_InputMessage" />
<wsdl:output wsaw:Action="http://tempuri.org/ITestService/StatusServiceResponse" message="tns:ITestService_StatusService_OutputMessage" />
</wsdl:operation>
- <wsdl:operation name="getData">
<wsdl:input wsaw:Action="http://tempuri.org/ITestService/getData" message="tns:ITestService_getData_InputMessage" />
<wsdl:output wsaw:Action="http://tempuri.org/ITestService/getDataResponse" message="tns:ITestService_getData_OutputMessage" />
</wsdl:operation>
- <wsdl:operation name="getTime">
<wsdl:input wsaw:Action="http://tempuri.org/ITestService/getTime" message="tns:ITestService_getTime_InputMessage" />
<wsdl:output wsaw:Action="http://tempuri.org/ITestService/getTimeResponse" message="tns:ITestService_getTime_OutputMessage" />
</wsdl:operation>
- <wsdl:operation name="getText">
<wsdl:input wsaw:Action="http://tempuri.org/ITestService/getText" message="tns:ITestService_getText_InputMessage" />
<wsdl:output wsaw:Action="http://tempuri.org/ITestService/getTextResponse" message="tns:ITestService_getText_OutputMessage" />
</wsdl:operation>
- <wsdl:operation name="SaveEntity">
<wsdl:input wsaw:Action="http://tempuri.org/ITestService/SaveEntity" message="tns:ITestService_SaveEntity_InputMessage" />
<wsdl:output wsaw:Action="http://tempuri.org/ITestService/SaveEntityResponse" message="tns:ITestService_SaveEntity_OutputMessage" />
<wsdl:fault wsaw:Action="http://tempuri.org/ITestService/SaveEntityDatabaseFaultFault" name="DatabaseFaultFault" message="tns:ITestService_SaveEntity_DatabaseFaultFault_FaultMessage" />
</wsdl:operation>
</wsdl:portType>
- <wsdl:binding name="BasicHttpBinding_ITestService" type="tns:ITestService">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
- <wsdl:operation name="StatusService">
<soap:operation soapAction="http://tempuri.org/ITestService/StatusService" style="document" />
- <wsdl:input>
<soap:body use="literal" />
</wsdl:input>
- <wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
- <wsdl:operation name="getData">
<soap:operation soapAction="http://tempuri.org/ITestService/getData" style="document" />
- <wsdl:input>
<soap:body use="literal" />
</wsdl:input>
- <wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
- <wsdl:operation name="getTime">
<soap:operation soapAction="http://tempuri.org/ITestService/getTime" style="document" />
- <wsdl:input>
<soap:body use="literal" />
</wsdl:input>
- <wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
- <wsdl:operation name="getText">
<soap:operation soapAction="http://tempuri.org/ITestService/getText" style="document" />
- <wsdl:input>
<soap:body use="literal" />
</wsdl:input>
- <wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
- <wsdl:operation name="SaveEntity">
<soap:operation soapAction="http://tempuri.org/ITestService/SaveEntity" style="document" />
- <wsdl:input>
<soap:body use="literal" />
</wsdl:input>
- <wsdl:output>
<soap:body use="literal" />
</wsdl:output>
- <wsdl:fault name="DatabaseFaultFault">
<soap:fault name="DatabaseFaultFault" use="literal" />
</wsdl:fault>
</wsdl:operation>
</wsdl:binding>
- <wsdl:service name="TestService">
- <wsdl:port name="BasicHttpBinding_ITestService" binding="tns:BasicHttpBinding_ITestService">
<soap:address location="http://192.128.09.26:8080/Server" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
答案 0 :(得分:2)
我发现了问题。
使用SlSvcUtil
创建代理并在Visual Studio中的项目中添加.cs后出现此错误:
名称空间'System.ServiceModel'中不存在类型或命名空间名称'XmlSerializerFormatAttributeAttribute'(您是否缺少程序集引用?)
首先,我尝试将System.Service.Model
从Silverlight版本更改为.Net版本,但我还有其他错误。
所以我找到了必要的地方,在/serializer:DataContractSerializer
中使用SlSvcUtil
;之后,这个错误就解决了。但是,在生成代理时,我收到了WSDL警告。
我使用以下命令创建了代理:
SlSvcUtil.exe http://192.128.09.26:8080/Server /out:C:\Projets\Client\dService.cs /config:C:\Projets\Client\ServiceReferences.ClientConfig
然后我在Visual Studio中遇到了这个错误:
名称空间'System.ServiceModel'中不存在类型或命名空间名称'XmlSerializerFormatAttributeAttribute'(您是否缺少程序集引用?)
我添加了以下dll:
Visual Studio无法在ServiceModel.dll中找到引用,而ServiceModel就在那里,所以我从未想过添加另一个.dll,因为已经添加了正确的dll。
就在昨天,我尝试添加System.Xml.Serialization.dll,现在everthing工作正常。