gpt4 book ai didi

wcf - 通过代理服务器连接到 WCF 服务时出现奇怪的异常

转载 作者:行者123 更新时间:2023-12-04 17:58:48 40 4
gpt4 key购买 nike

异常“ 相对 URI 不支持此操作。”在以下情况下发生:

我有一个 WCF 服务:

[ServiceContract(ProtectionLevel=ProtectionLevel.None)]
public interface IMyService
{
[OperationContract]
[FaultContract(typeof(MyFault))]
List<MyDto> MyOperation(int param);

// other operations
}

public class MyService : IMyService
{
public List<MyDto> MyOperation(int param)
{
// Do the business stuff and return a list of MyDto
}

// other implementations
}
MyFaultMyDto是用 [DataContract] 标记的两个非常简单的类属性,每个只有三个 [DataMember]类型 string, int and int? .

此服务与 ASP.NET 应用程序一起托管在 Win 2008 服务器上的 IIS 7.0 中。我正在使用 SVC 文件 MyService.svc它直接位于网站的根目录中。 web.config 中的服务配置如下:
<system.serviceModel>
<services>
<service name="MyServiceLib.MyService">
<endpoint address="" binding="wsHttpBinding"
bindingConfiguration="wsHttpBindingConfig"
contract="MyServiceLib.IMyService" />
</service>
</services>
<bindings>
<wsHttpBinding>
<binding name="wsHttpBindingConfig">
<security mode="None">
<transport clientCredentialType="None" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="false"/>
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>

就我可以输入地址 http://www.domain.com/MyService.svc 而言,这似乎有效在浏览器中并获得“这是一个 Windows Communication Foundation 服务”-欢迎页面。

使用该服务的客户端之一是控制台应用程序:
MyServiceClient aChannel = new MyServiceClient("WSHttpBinding_IMyService");
List<MyDto> aMyDtoList = aChannel.MyOperation(1);

它具有以下配置:
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_IMyService" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
bypassProxyOnLocal="true" transactionFlow="false"
hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="false"
proxyAddress="10.20.30.40:8080" allowCookies="false">
<readerQuotas maxDepth="32" maxStringContentLength="8192"
maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="false" />
<security mode="None">
<transport clientCredentialType="Windows" proxyCredentialType="None"
realm="" />
<message clientCredentialType="Windows"
negotiateServiceCredential="true" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="http://www.domain.com/MyService.svc" binding="wsHttpBinding"
bindingConfiguration="WSHttpBinding_IMyService"
contract="MyService.IMyService"
name="WSHttpBinding_IMyService" />
</client>
</system.serviceModel>

当我在调用 aChannel.MyOperation(1) 的客户站点的生产服务器上运行此应用程序时抛出以下异常:

相对 URI 不支持此操作。

当我在我的开发 PC 上使用完全相同的配置运行此客户端应用程序时, 除了我删除了proxyAddress="10.20.30.40:8080"来自绑定(bind) 操作没有问题。

现在真不知道 指定代理服务器地址可能与绝对或相对 URI 有什么关系 .在生产或开发机器上运行客户端时,我能看到的唯一区别是是否使用代理服务器。

有人知道这个异常在这种情况下可能意味着什么以及如何解决这个问题?

提前感谢您的帮助!

编辑:

如果它应该很重要:服务和客户端是在 中使用 WCF 构建的.NET 框架 4 .

最佳答案

10.20.30.40:8080不是有效的 URL。你想要http://10.20.30.40:8080 .

这是我的诊断思维过程,以防它帮助任何人:

  • 异常(exception)通常不会说谎。他们通常的意思正是他们所说的。诀窍是了解他们如何可能说真话。
  • 异常表示“相对 URI 不支持此操作”。如果这是真的,那么这意味着正在执行一个操作,它被赋予了一个相对 URL,但它不支持相对 URI。
  • OP 然后说,当他运行应用程序时,“除了我从绑定(bind)中删除 proxyAddress="10.20.30.40:8080"之外”。

  • 在我面前的是一个相对 URI。当他删除它时,“操作”起作用了,所以我推断这是提供给不支持它们的“操作”的相对 URI。

    你不一定要成为福尔摩斯来解决这个问题。关键是能够立即看到没有 scheme://在 URI 前面,使其相对。

    关于wcf - 通过代理服务器连接到 WCF 服务时出现奇怪的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3048240/

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