gpt4 book ai didi

rest - WCF 代理使用 Post 即使指定了 WebGet 属性(仅当从另一个 WCF 服务调用时) - 导致 405 错误

转载 作者:行者123 更新时间:2023-12-05 00:29:57 24 4
gpt4 key购买 nike

我有一个 Restful WCF 服务,它位于另一台服务器上,该服务器配置了 WebGet 属性以响应 HTTP Get 方法。我知道该服务可以正常工作,因为我可以直接通过浏览器调用该服务并手动使用 Fiddler 执行 Get 并接收正确的响应。

我的本地机器上有一个 Asp.NET 项目,它使用以下代码调用此服务:

代理接口(interface)“IProductService”:

using System.ServiceModel;
using System.ServiceModel.Web;

namespace Hugo.Infrastructure.Services.Products
{
[ServiceContract]
[XmlSerializerFormat]
public interface IProductService
{
[OperationContract(Name = "GetProductById")]
[WebGet(UriTemplate = "Products/Titles/{id}",
ResponseFormat = WebMessageFormat.Xml,
RequestFormat = WebMessageFormat.Xml,
BodyStyle = WebMessageBodyStyle.Bare)]
TitleDto GetTitleById(string id);
}
}

实现“产品服务”:
using System.ServiceModel;

namespace Hugo.Infrastructure.Services.Products
{
public class ProductService : ClientBase<IProductService>, IProductService
{
public TitleDto GetTitleById(string id)
{
return Channel.GetTitleById(id);
}
}
}

相关的 Web.config 部分:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true">
<baseAddressPrefixFilters>
</baseAddressPrefixFilters>
</serviceHostingEnvironment>
...
<client>
<endpoint address="http://server/directory/product.svc" bindingConfiguration="ProductServiceBinding" binding="webHttpBinding" behaviorConfiguration="productService" contract="Project.Infrastructure.Services.Products.IProductService" name="ProductServiceRest" />
</client>
<behaviors>
...
<endpointBehaviors>
<behavior name="productService">
<webHttp />
</behavior>
...
</endpointBehaviors>
</behaviors>
</system.serviceModel>

当我们从项目中的页面调用该方法时,这可以正常工作,但是在此行 return Channel.GetTitleById(id); 上会出错当我们从同一项目的 WCF 服务中调用它时。我们收到的错误是 HTTP 405 'Method not allowed' 错误。当我们查看远程服务器上的 IIS 日志时,我们看到 ProductService 代理在从页面启动方法调用时发出 HTTP GET 请求,但在从 WCF 服务调用方法时发出 HTTP POST 请求。服务上未配置 POST 方法,因此出现 405 错误。

即使页面和服务在同一个文件夹和命名空间中,我们仍然会从服务中收到相同的错误。如果我们使用经典的 asmx soap 服务,那么会进行 GET 调用,服务会正确执行和响应。如果我们使用 System.Net.WebRequest 对象手动从 WCF 服务获取,则服务调用成功。

最重要的是,当在另一个 WCF Rest 服务中使用时,WCF 客户端代理尝试执行 POST 而不是 GET,但在从页面或几乎其他任何地方使用时可以正常工作。

请帮忙!

最佳答案

关于rest - WCF 代理使用 Post 即使指定了 WebGet 属性(仅当从另一个 WCF 服务调用时) - 导致 405 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3294766/

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