Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将枚举传递给服务中的方法_C#_Wcf_Enums - Fatal编程技术网

C# 将枚举传递给服务中的方法

C# 将枚举传递给服务中的方法,c#,wcf,enums,C#,Wcf,Enums,我在sharepoint服务器上运行了一个非常简单的WCF服务,它有一个类似以下内容的ServiceContract: [ServiceContract] interface iSPTest { [OperationContract] Stream Process(Stream input); } 这很好,我可以使用svcuti生成代理和配置文件。但是,我想将其更改为使用枚举: [OperationContract] Stream Process(Stream

我在sharepoint服务器上运行了一个非常简单的WCF服务,它有一个类似以下内容的
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)