gpt4 book ai didi

c# - 我如何获得 WSDL/描述以便我可以在另一个项目中添加 Web 引用?

转载 作者:太空宇宙 更新时间:2023-11-03 20:32:00 25 4
gpt4 key购买 nike

我知道如何在 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

然后我收到“服务 ... 未找到端点”。以及“添加 Web 引用”框中的错误消息:

There was an error downloading 'http://example.com:8080/'. The request failed with HTTP status 404: Not Found. There was an error downloading 'http://example.com:8080/$metadata'. The request failed with HTTP status 404: Not Found.

如果我打开网络浏览器并直接转到 http://example.com:8080/GetArea服务按预期调用/执行。

所以为了更简短地改述问题:WSDL/描述不存在,所以我无法添加 Web 服务引用。

最佳答案

这里的问题是 WebServiceHost 将删除您在添加 ServiceMetadataBehavior 时尝试实现的功能。查看 WebServiceHost 的 dotPeek(反射器),在 OnOpening 方法中有:

ServiceDebugBehavior serviceDebugBehavior = this.Description.Behaviors.Find<ServiceDebugBehavior>();
if (serviceDebugBehavior != null)
{
serviceDebugBehavior.HttpHelpPageEnabled = false;
serviceDebugBehavior.HttpsHelpPageEnabled = false;
}
ServiceMetadataBehavior metadataBehavior = this.Description.Behaviors.Find<ServiceMetadataBehavior>();
if (metadataBehavior != null)
{
metadataBehavior.HttpGetEnabled = false;
metadataBehavior.HttpsGetEnabled = false;
}

WebServiceHost 旨在与通常没有定义契约的 REST/JSON 服务一起使用,因此元数据 (mex) 被禁用。

如果您尝试创建基于 SOAP 的服务,则需要使用标准的 ServiceHost。看起来这就是您想要的,因为您正在尝试通过 VS 添加服务引用。

如果您尝试创建 REST/JSON 服务,您可以使用 WebServiceHost

关于c# - 我如何获得 WSDL/描述以便我可以在另一个项目中添加 Web 引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7078885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com