我知道如何在 Visual Studio 中添加 WebReference,很简单。
我也知道如何创建一个普通的 ASP.NET Web 服务项目,但这不是我要做的。
因此,我运行的 WebService 如下所示:
try
{
if (host != null)
{
host.Close();
host = null;
}
baseAddress = new Uri("http://example.com:8080");
host = new WebServiceHost(typeof(MyProxy), baseAddress);
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
host.Description.Behaviors.Add(smb);
host.Opened += new EventHandler(host_Opened);
host.Closed += new EventHandler(host_Closed);
System.ServiceModel.Description.ServiceEndpoint se = host.AddServiceEndpoint(typeof(IMyProxy), new WebHttpBinding(), baseAddress);
se.Behaviors.Add(new System.ServiceModel.Description.WebHttpBehavior());
host.Open();
}
catch (Exception e)
{
}
// .... stuff ....
[ServiceContract]
public interface IMyProxy
{
[OperationContract]
[WebGet(UriTemplate = "GetArea?searchString={searchString}")]
GetAreaResult GetArea(string searchString);
}
// more stuff of course follows here
问题是当我尝试在 Visual Studio 中向上述服务添加 WebReference 时,出现错误。
“添加服务引用”->“添加 Web 引用”,在 URL 中我写了我的 URL,http ://example.com:8080
然后我得到“服务......找不到端点”。以及 Add Web Reference 框中的错误消息:
下载“ http://example.com:8080/ ”时出错。请求失败,HTTP 状态为 404:未找到。下载“ http://example.com:8080/$metadata ”时出错。请求失败,HTTP 状态为 404:未找到。
如果我打开 Web 浏览器并直接访问http://example.com:8080/GetArea,该服务将按预期调用/执行。
因此,将问题改写得更短:WSDL/描述不存在,因此我无法添加 Web 服务引用。