【发布时间】:2016-10-14 15:55:28
【问题描述】:
我创建了一个对象,我想在 WCF 调用中传递它……但在 ServiceReference1 中……这个对象被重新定义……有没有办法在任何地方都使用原始对象……似乎人们已经这样做了,但我无法弄清楚我做错了什么。
该对象用作服务合同中函数的参数。
[OperationContract(IsOneWay = true)]
void UpdateInformation(MyObject myObject);
当我尝试从客户端调用函数时出现的错误是“参数 1:无法从‘MyNameSpaceDTO.MyObject’转换为‘MyNameSpace.ServiceReference1.MyObject’”
对象在它自己的类库dll中,并用[DataObject]和[DataMember]属性标记。
namespace MyNameSpaceDTO
{
[DataContract]
public class MyObject
{
[DataMember]
public string Name { get; set; }
….
但是,在将服务引用添加为之后,也会在 Reference.cs 中结束:
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="MyObject", Namespace="http://schemas.datacontract.org/2004/07/MyNameSpaceDTO")]
[System.SerializableAttribute()]
public partial class MyObject : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
[System.NonSerializedAttribute()]
private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private string NameField;
...
另外,我确实在“添加服务参考”的“高级”部分设置了以下内容:
[x] 在引用的程序集中重用类型
(o) 在所有引用的程序集中重用类型
【问题讨论】:
-
您的解决方案结构如何?我想有几个程序集:一个包含 DTO 的合同程序集,另一个托管服务的程序集和第三个作为该服务的客户端的程序集?
-
我有一个用于 DTO...一个包含客户端和服务代码的库...然后是两个 WinForms 应用程序,一个实例化并使用客户端函数,另一个实例化和使用服务功能。
-
好的,您在客户端应用程序中通过添加服务引用对话框引用了该服务?
标签: c# wcf idataobject