C# 将枚举传递给服务中的方法
我在sharepoint服务器上运行了一个非常简单的WCF服务,它有一个类似以下内容的C# 将枚举传递给服务中的方法,c#,wcf,enums,C#,Wcf,Enums,我在sharepoint服务器上运行了一个非常简单的WCF服务,它有一个类似以下内容的ServiceContract: [ServiceContract] interface iSPTest { [OperationContract] Stream Process(Stream input); } 这很好,我可以使用svcuti生成代理和配置文件。但是,我想将其更改为使用枚举: [OperationContract] Stream Process(Stream
ServiceContract
:
[ServiceContract]
interface iSPTest
{
[OperationContract]
Stream Process(Stream input);
}
这很好,我可以使用svcuti
生成代理和配置文件。但是,我想将其更改为使用枚举:
[OperationContract]
Stream Process(Stream input, MyEnumType foo);
定义了enum
后:
[DataContract]
public enum MyEnumType
{
[EnumMember]
Default = 0,
[EnumMember]
Foo,
[EnumMember]
Bar
};
但是,当我这样做时,我无法再让代理生成。我得到一个错误:
Metadata contains a reference that cannot be resolved: 'http://myserver/_vti_
bin/SPTest/SPTest.svc'.
The requested service, 'http://myserver/_vti_bin/SPTest/SPTest.svc' could not
be activated. See the server's diagnostic trace logs for more information.
看来这应该是一件简单的事情。我已尝试将
servicenknownType
添加到ServiceContract
,但似乎没有帮助。为什么它似乎无法获取枚举类型?为了获得额外的积分,是否可以在服务器引用但客户端不引用的程序集中使用现有枚举?因为在这种情况下,无法使用DataContract
标记enum
?问题不在于枚举。这与WCF流的概念有关。您有一个web方法,它接受两个参数,第一个参数的类型为Stream
。不支持此操作,因为保存要传输的数据的参数可以作为方法中的唯一参数存在。看
我认为,如果您试图创建服务主机,使用当前的OperationContract,您将得到invalidoOperationException
,即操作必须有一个类型为Stream的参数
您可以通过引入新类型并在其中封装流和枚举来解决这个问题。好的,听起来不错。搜索更多,这:看起来是正确的方法。有趣的是,当使用
MySteam
自定义消息契约时,如果我使用流处理(MySteam输入),它将不起作用代码>,必须是MySteam进程(MySteam输入)
和代理坚持创建一个签名为void Process的方法(ref myEnum foo,ref Stream input)代码>