困惑:我的方法不接受其定义中包含的参数

时间:2011-08-31 15:13:48

标签: c# wcf class methods attributes

我不确定如何用这句话来表达,但这里有:

我有一个名为 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;
}

2 个答案:

答案 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。 希望这是有道理的。