将 WCF 的 Web 引用添加到 ASP.NET 2.0 时,添加了两个附加参数

When adding Web Reference for WCF to ASP.NET 2.0 there are two additional parameters added

我用几个简单的方法在 ASP.NET 4.5 中开发了一个 WCF。一种这样的方法具有 return 类型的布尔值(用 c# 编写)。当我将此服务添加到我的 ASP.NET 4.5 Web 应用程序作为服务参考时,它在后面的代码中按预期工作。它在 .NET 4.5 C# 控制台应用程序中的工作方式也相同。下面是此方法的实现文件中的代码:

public bool AddADUser(string a, string b)
{
    bool done = false;
    return done;
}

当我从我的程序中调用它时,它看起来像这样:

static void Main(string[] args)
{
    var proxy = new ServiceReference1.ADServiceClient();
    proxy.Open();

    try
    {
        Console.WriteLine(proxy.HelloWorld());
        bool success = proxy.AddADUser("testA", "testB");
        Console.WriteLine(success.ToString());
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
        Console.WriteLine(ex.InnerException);
    }
    finally
    {
        proxy.Close();
    }
}

这就是它在我的 ASP.NET 4.5 / C# 应用程序和我的 C# .NET 4.5 控制台应用程序中的工作方式。

当我将其作为 "Web Reference" 添加到现有 ASP.NET 2.0 / VB.NET 应用程序时,它会做一些不同的事情。调用AddADUser()函数的命令突然需要4个参数:

AddADUser(a As String, b As String, ByRef AddADUserResult As Boolean, ByRef AddADUserResultSpecified As Boolean)

为什么要添加这些参数 -- 这是 VB.NET 不允许它实际上 return 布尔值,还是 Web 引用不能 return 布尔值,或者这是 ASP.NET 2.0 的问题?

或者我需要制作一个自定义数据合约吗?我将该部分排除在我的界面之外,仅依赖于默认值。我是否还需要在某处指定 XmlSerializer 才能使用它?它似乎实际上做了它应该做的,我只是想不通为什么有两个布尔值,我想要哪个。

此页面给出了关于它的详细解释和一个我不想做的奇怪的解决方法:

http://www.codeproject.com/Articles/323097/WCF-ASMX-Interoperability-Removing-the-Annoying-xx

我最后做的是添加 [OperationContract, XmlSerializerFormat(Style = OperationFormatStyle.Rpc)] 在我的方法中,我还添加了 [服务合同,XmlSerializerFormat] 到我的接口属性,现在它们的行为就像我期望的那样。

参考:http://www.wenda.io/questions/1191041/result-and-resultspecified-parameters-in-wcf-service.html