GoDaddy上托管的Web服务失败

时间:2014-09-15 19:37:07

标签: c# asp.net web-services wcf

我有一个WCF Web服务,可以通过调试器在我的本地计算机上运行,​​并作为服务安装在IIS上。

当我在GoDaddy主机上安装它时,此Web服务失败。不执行函数开头的日志记录调用,浏览器收到400 /错误请求响应。

与此工作一起编译的其他服务按预期方式进行,因此不是Connection String,web.config等问题。

调用服务的URL很简单" GET"拨打:

http://tucansdev.com/TalLimoService.svc/GetTransportationOffers/1,2,1410885561,false

操作合同如下所示:

[OperationContract]
[WebInvoke(Method = "GET",
    ResponseFormat = WebMessageFormat.Json,
    BodyStyle = WebMessageBodyStyle.Wrapped,
    UriTemplate = "GetTransportationOffers/{pickupLocID},{dropoffLocID},{pickupTime},{isAsInstructed}")]
List<GetTransportationOffersResult> GetTransportationOffers(string pickupLocID, string dropoffLocID, string pickupTime, string isAsInstructed);

GoDaddy服务器上的日志确认已收到呼叫这一事实,但仅此而已。

为了彻底,这是我在web.config中的服务模型:

<system.serviceModel>
<services>
  <service name="TalLimoService.TalLimoService" behaviorConfiguration="ServiceBehavior">
    <!--Service Endpoints-->
    <!-- Unless fully qualified, address is relative to base address supplied above-->
    <endpoint address="" binding="webHttpBinding" contract="TalLimoService.ITalLimoService" behaviorConfiguration="web"/>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="ServiceBehavior">
      <!-- To avoid disclosing metadata information, set the values below to false before deployment -->
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
      <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
      <serviceDebug includeExceptionDetailInFaults="false"/>
    </behavior>
  </serviceBehaviors>
  <endpointBehaviors>
    <behavior name="web">
      <webHttp/>
    </behavior>
  </endpointBehaviors>
</behaviors>
<protocolMapping>
  <add binding="basicHttpsBinding" scheme="https"/>
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="false" multipleSiteBindingsEnabled="true"/>

更糟糕的是,它曾经有效。我将第三个参数从显式日期更改为时间标记,据我所知,这不会影响界面。当我恢复旧版本时,我仍然得到400响应,所以我猜这不是代码。它是什么?

下一步

由于它曾经工作,我将代码简化为一个完全无关紧要的界面,然后没有任何问题。然后我将所有参数恢复到端点,但是使用空函数。 函数的前两行看起来像这样:

   List<GetTransportationOffersResult> transList = new List<GetTransportationOffersResult>();
   TalLimoDataDataContext tlData = new TalLimoDataDataContext();

当函数只有第一行时,一切都很好。第二行导致服务返回错误400.然后我会说我的.dbml文件有问题,但是这个Web服务中的其他函数进行相同的调用,并且没有问题!

1 个答案:

答案 0 :(得分:0)

事实证明问题出在web.config文件中。在我的机器上我有:

<connectionStrings>
  <add name="DataSourceConnectionString"...

并且在服务器上,由于某种原因,它是

<connectionStrings>
  <add name="TalLimoConnectionString"...

所以在我的机器上它起作用了,而在服务器上却没有。我想这个故事的寓意永远不会假设任何东西。