c# - .net core 2.1 中的 SAP WS WCF 客户端消耗错误 405
问题描述
我正在尝试使用需要身份验证的 SAP 的 Web 服务。我成功添加了网络服务。但是,当我想使用它(httpGet)时,它给了我错误 405 Method Not Allowed
我尝试使用另一个具有身份验证的 Web 服务,它工作正常。
我尝试在 SOAP UI 中使用当前的 Web 服务,它工作得非常好。
我尝试使用带有 httpBinding 的工厂BasicHttpSecurityMode.TransportCredentialOnly and myBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
我与服务提供商重新检查了 Uri,它是正确的。
我检查了 Windows 功能:
- Windows 通信基础 HTTP Activation 检查,
- 检查 Windows 通信基础 HTTP 未激活。
- WCF 服务:
- 检查 HTTP 激活,
- 检查命名管道激活,
- 检查 TCP 激活,
检查 TCP 端口共享。
public testWS(IConfiguration configuration) { _configuration = configuration; endpoint = new EndpointAddress(new Uri("link")); _serviceClient = new ServiceClient(EndpointConfiguration.HTTP_Port, endpoint); _serviceClient.ClientCredentials.UserName.UserName = "username"; _serviceClient.ClientCredentials.UserName.Password = "Password"; } public async Task<ServiceResponse> getAccount2() { var i = new ServiceRequest(); var x = await _serviceClient.ServiceFunctionAsync(i); return x; }
ProtocolException:远程服务器返回了意外响应:(405)方法不允许。
解决方案
在大多数情况下,您调用服务的方式是标准的 SOAP 调用,即以下基于 HTTP-POST 而非 HTTP-GET 的请求。
var x = await _serviceClient.ServiceFunctionAsync(i);
当我想使用它(httpGet)时,它给了我错误 405 Method Not Allowed
您如何定义服务合同?我的意思是发布的服务可能会使用 webhttpbinding 来创建一个 Restful 风格的服务。在这种情况下,如果我们想通过客户端代理类调用服务,我们需要在自动生成的服务端点中添加Webhttp端点行为。另外,将 [webget] 添加到操作合同中。请参考我的演示。
WCF:没有可以接受消息的端点监听
简单来说,使用客户端代理调用服务时,我们应该确保客户端和服务器之间的绑定是一致的。
请与我们分享服务器绑定详细信息,以便我可以重现您的问题并准确定位问题。
如果问题仍然存在,请随时告诉我。
推荐阅读
- java - 为什么我的电子邮件发送在已部署的网站上不起作用,但在我的本地主机上起作用?
- regex - 如何检查熊猫括号内的内容
- javascript - 在 React 开发人员工具的“组件”选项卡中更新组件状态的问题 - Chrome 扩展
- reactjs - readOnly 未在 react js 中申请材料 ui 的 KeyboardDatePicker 的输入字段
- android - 语言更改时RecyclerView不更改资源值
- xml - 更改属性值的一部分
- r - R 在矩阵上使用 sapply 时保留列名和行名
- arrays - 如何解决具有大和 10^18 且递归关系作为数组元素的子集和问题
- scala - spark scala中的自定义字符串
- r - 将具有未来的并行代码从 mac 移植到 windows 失败