将 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
我用几个简单的方法在 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