我不确定如何用这句话来表达,但这里有:
我有一个名为 EmailAttachment 的自定义类,它定义了3个属性/属性。该类的一个对象被传递给一个名为 UploadAttachment
的方法(在另一个类中)void UploadAttachment(EmailAttachment attachment);
然而,当我使用例如
实现它时client.UploadAttachment(emailAttachmentInstance)
Visual Studio告诉我, UploadAttachment 不接受1个参数,而是接受3个(即类定义中的变量)。
这让我很开心困惑,所以任何帮助表示赞赏
澄清一点......
client
实际上是WCF服务的一个实例。服务界面包括
[OperationContract]
void UploadAttachment(EmailAttachment attachment); //which is public.
以下是有问题的课程......
[MessageContract]
public class EmailAttachment
{
[MessageHeader(MustUnderstand = true)]
public int EmailID;
[MessageHeader(MustUnderstand = true)]
public string FileName;
[MessageBodyMember(Order = 1)]
public Stream AttachmentFile;
}
答案 0 :(得分:1)
如果没有更多信息很难回答(你能发布一些代码吗?)但是如果我可以猜测我会说定义“客户”的类有两个叫做UploadAttachment的方法,那你要尝试的那个电话不公开。 e.g。
public class Client {
void UploadAttachment(EmailAttachment e) {} //note: needs to be public
public void UploadAttachment(int a, int b, int c) {}
}
答案 1 :(得分:0)
所以这是我的答案(朋友的部分推测/假设)......
我想这与WCF服务的性质有关。为了防止客户端并发症(即依赖于服务定义的类),客户端可以传递[service]类的属性/属性(前面提到的3)作为方法的参数(在这种情况下UploadAttachment()
)。因此,它只需要知道那些属性/属性的数据类型,而不必实例化其类的对象。自定义退货类型也可以这样做
例如,如果SomeClass
被定义为......
[MessageContract]
public class SomeClass
{
[MessageBodyMember]
public bool value;
public SomeClass(bool value)
{
this.value = value;
}
}
...并且该服务有一个返回值为SomeClass
的方法,如此...
SomeClass SomeMethod();
......客户可以像这样呼叫SomeMethod()
......
bool someReturnValue = client.SomeMethod();
而不是必须实例化SomeClass
。
希望这是有道理的。