我正在尝试在Web服务中重载方法但是在Visual Studio 2005中尝试“添加Web引用”时遇到System.InvalidOperationException(这是相关的代码片段):
public class FileService : System.Web.Services.WebService
{
private static readonly MetaData[] EmptyMetaData = new MetaData[0];
public FileService()
{
// a few innocent lines of constructor code here...
}
[WebMethod(MessageName = "UploadFileBasic",
Description = "Upload a file with no metadata properties")]
public string UploadFile(string trimURL
, byte[] incomingArray
, string fileName
, string TrimRecordTypeName)
{
return UploadFile(trimURL
, incomingArray
, fileName
, TrimRecordTypeName
, EmptyMetaData);
}
[WebMethod(MessageName = "UploadFile",
Description = "Upload a file with an array of metadata properties (Name/Value pairs)")]
public string UploadFile( string trimURL
, byte[] incomingArray
, string FileName
, string TrimRecordTypeName
, MetaData[] metaDataArray)
{
// body of UploadFile function here
我认为在WebMethod属性上提供不同的MessageName属性可以解决此问题,但这是我得到的完整错误消息:
System.String UploadFileBasic(System.String,Byte [],System.String,System.String)和System.String UploadFile(System.String,Byte [],System.String,System.String)都使用该消息名称'UploadFileBasic'。使用WebMethod自定义属性的MessageName属性为方法指定唯一的消息名称。
Web服务编译正常;我看不出这里有什么问题。
答案 0 :(得分:14)
我的建议是不要使用重载的方法名称。 WSDL中没有这样的概念,为什么要这么麻烦?
答案 1 :(得分:6)
您需要更改此部分:
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
到这一个:
[WebServiceBinding(ConformsTo = WsiProfiles.None)]
答案 2 :(得分:0)
我通常在Web服务接口后面有一个具有重载方法的类对象,然后在asmx.cs文件中使用不同的名称创建单独的方法。我知道你可以使用这些属性,但它只是制作更整洁的代码恕我直言。
答案 3 :(得分:0)
Web服务不允许操作重载。但您也可以按照以下步骤操作。
首先你需要改变
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
到
[WebServiceBinding(ConformsTo = WsiProfiles.None)]
其次,对于Overloaded方法,WebMethod的MessageName属性应该是不同的。
namespace foo
{
/// <summary>
/// Summary description for TestService
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.None)]
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
// [System.Web.Script.Services.ScriptService]
public class TestService : System.Web.Services.WebService
{
[WebMethod(MessageName = "HelloWorld1")]
public string HelloWorld()
{
return "Hello World";
}
[WebMethod(MessageName = "HelloWorld2")]
public string HelloWorld(string Value = "default")
{
return "Hello World";
}
}
}
但是如果你要调用URL Like:
http://localhost:15558/TestService.asmx/HelloWorld2?Value=2
它会起作用。
但是如果你要调用URL Like:
http://localhost:15558/TestService.asmx/HelloWorld?Value=2
它会显示HTTP 500