我的DTO类型声明如下:
[Serializable]
public class PersonDTO
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
我有一个WCF服务,其操作合同如下所示:
[OperationContract]
public PersonDTO GetPerson(int id);
我遇到的问题是当我使用“添加服务引用”来使用此服务时,wsdl包含如下内容:
<xs:schema elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/Test.DTO">
−
<xs:complexType name="PersonDTO">
−
<xs:sequence>
<xs:element name="_x003C_Id_x003E_k__BackingField" nillable="true" type="xs:int"/>
<xs:element name="_x003C_FirstName_x003E_k__BackingField" nillable="true" type="xs:string"/>
<xs:element name="_x003C_LastName_x003E_k__BackingField" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:element name="IVQueueDTO" nillable="true" type="tns:IVQueueDTO"/>
</xs:schema>
当我尝试在WCF客户端上引用时,而不是获取person.Id和person.FirstName,而不是获取person.Idk__BackingField,person.FirstNamek_BackingField等。
我应该怎样做才能获得我在WCF服务端定义的确切类型?我在PersonDTO上使用Serializable属性,因为这个服务需要与java互操作。我正在使用.NET Framework 4.0,C#,Visual Studio 2010,Win XP SP3。 WCF服务公开http端点并使用basicHttpBinding。
答案 0 :(得分:2)
您是否尝试过使用DataContact和DataMember属性而不是Serializable?我相信它仍然会为您提供Java可以访问的可序列化对象。
答案 1 :(得分:0)
DataContact解决了这个问题。但我不确定DataContract是否可与Java互操作。我还要测试一下。但我很确定上述问题是由Serializable属性引起的。看看这个链接。这让我相信DataContract应该可以互操作。