【问题标题】:Calling web service from asp.net causes exception but from windows app does not?从 asp.net 调用 web 服务会导致异常,但从 windows 应用程序不会?
【发布时间】:2012-03-30 22:25:41
【问题描述】:

我有一个使用 Bing Translate Web 服务的 asp.net 站点(http://api.microsofttranslator.com/V2/Soap.svc)

调用服务的代码导致异常(在http://api.microsofttranslator.com/V2/soap.svc 上没有可以接受消息的端点监听。这通常是由不正确的地址或 SOAP 操作引起的。有关更多详细信息,请参阅 InnerException(如果存在)。)

但同样的代码可以在 windows 应用程序中使用。

代码:

BingService.LanguageServiceClient client = new BingService.LanguageServiceClient();
res = client.Translate(BingAppID, "text", "en", "ar", "text/plain", "general");

我怀疑它可能来自我的域(iis 或类似的东西)的策略,因为我试图使用另一个互联网连接(域外,没有防火墙的普通 DSL)它工作正常!!但是当我运行 windows 应用程序时,这个政策怎么可能不适用?

【问题讨论】:

  • 这可能是一个愚蠢的问题,但是您是否在 web.config 文件或 web.config 文件中指向的文件中定义了端点?
  • @taylonr - 这根本不是一个愚蠢的问题,可能是最可能的原因。接下来很可能是运行 ASP.NET 站点的服务器无法正确看到外部世界,但我会先检查 Web.Config 以确保 <system.serviceModel><client> 部分存在且正确。
  • 它存在于 serviceModel api.microsofttranslator.com/V2/soap.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_LanguageService" contract="BingTranslateService.LanguageService" name="BasicHttpBinding_LanguageService"/>
  • 我认为唯一的区别是调用的上下文,可能是asp.net方面的东西
  • 您的 ASP.NET 站点是位于您的开发机器上,还是位于测试服务器上?如果在测试服务器上,该服务器是否可以访问网络?甚至对此有任何限制?

标签: c# asp.net web-services


【解决方案1】:

还要检查运行网站的应用程序池的身份。如果它在 LocalSystem 或 LocalService 帐户下运行,则无法访问外部资源(例如 Internet Web 服务)。在这种情况下,使用 NetworkService 帐户重新配置应用程序池(或者更好的是,创建一个新的专用应用程序池)可能会解决问题。

【讨论】:

  • 您使用代理吗?那么你也应该在你的绑定上指定它。
【解决方案2】:

您可以将应用程序放在不允许访问您的 Intranet 之外的网络服务器上。

您可能还需要查看Impersonation 您可能需要它才能通过防火墙。

【讨论】:

    【解决方案3】:

    是否有可能在 Windows 应用程序中代理保持实例化,但在 Web 应用程序中代理超出范围并在请求之间重新创建?您可能需要在请求之间保持代理实例化以保持“连接”建立。

    【讨论】:

    • 只需创建服务对象并调用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    • 1970-01-01
    • 2014-02-24
    • 1970-01-01
    • 1970-01-01
    • 2016-08-07
    相关资源
    最近更新 更多