WCF:不支持带out参数的操作

时间:2011-01-07 21:52:10

标签: .net rest wcf

我在WebApplication项目中创建了一个简单的WCF服务。

[ServiceContract(Namespace = "http://my.domain.com/service")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class MyService
{
    [OperationContract]
    public string PublishProfile(out string enrollmentId, string registrationCode)
    {
        enrollmentId = null;
        return "Not supported";
    }

内置 - 一切都已成功编译

之后我尝试在浏览器中打开服务,我遇到以下错误:

  

合同'MyService'中的'PublishProfile'操作指定'out'或'ref'参数。不支持带有“out”或“ref”参数的操作

我不能使用'out'参数吗?

这里有什么问题?

由于

P.S。我使用VS2008 SP1,.NET 3.5

5 个答案:

答案 0 :(得分:4)

我的问题是我的ASP.NET应用程序中使用Visual Studio向导创建的默认服务配置是一种服务类型。端点绑定是“webHttpBinding”。据我所知,它现在是REST服务的绑定,并且它们没有物理能力来处理参数。对于它们,不支持参数。而我实际需要的是一个'basicHttpBinding',它允许使用out参数。

非常感谢帮助我弄明白的人。

答案 1 :(得分:2)

我找到的答案是:

“out参数的想法是该方法将实例化您传入的空引用.Web服务是无状态的;因此您对作为参数进入Web服务的对象的句柄将不会是与进入Web服务服务器端的那个相同。这样做的性质可以防止出现参数。“

Source

答案 2 :(得分:1)

试试这个:

...
[OperationContract]
[WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped)]
public string PublishProfile(out string enrollmentId, string registrationCode)
...

我相信默认的主体样式(裸)只支持单个返回值。

答案 3 :(得分:0)

我认为应该追查Out参数。

它应该是这样的:

public string PublishProfile(string registrationCode, out string enrollmentId)

另外,您要将字符串设置为null - 为什么不使用string.Empty

答案 4 :(得分:0)