繁体   English   中英

Visual Studio 2013中的WCF RESTful调用问题

[英]WCF RESTful Calling Issue in Visual Studio 2013

我有一个自ASMX时代以来一直存在的ASP.NET应用程序。 过去升级此项目时,我可以通过扩展System.Web.Services.WebService类来使用WCF服务,然后利用WebInvoke属性来允许对我的各种方法进行RESTful调用。 这是一个例子:

[ServiceContract(Namespace = "http://10.23.41.189/", Name = "SEO")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class SEO : System.Web.Services.WebService
{
    [WebMethod(Description = "Use this Web Method to log into The SEO Panel")]
    [OperationContract]
    [WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json,
        UriTemplate = "Login?User={User}&Pass={Pass}")]
    public string Login(string User, string Pass)
    {

然后转到http://10.23.41.189/seo.svc/login?User=USER&Pass=PASS,可以毫无问题地调用该方法

在旧项目中,我使用的是网站项目,而不是Web应用程序,现在我已经升级到Visual Studio 2013,我正在使用Web应用程序 - 而且该调用不再有效。 我实际上使用复制和粘贴将所有内容移植到了上面,当我运行WSDL时,我看到了这些方法,但是所有调用都返回了400 Bad Request错误。 这是我的web.config信息:

<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
  multipleSiteBindingsEnabled="true" />
<services>
  <service name="SEO">
    <endpoint address="http://10.23.41.189/SEO.svc" behaviorConfiguration="json" binding="webHttpBinding" name="MainHttpPoint" contract="SEOPlatform.Intranet.SEO"/>
    <endpoint address="mex" binding="mexHttpBinding" name="MexEP" contract="IMetadataExchange"/>
    <host>
      <baseAddresses>
        <add baseAddress="http://10.23.41.189/SEO.svc"/>
      </baseAddresses>
    </host>
  </service>
</services>
<bindings>
  <webHttpBinding>
    <binding openTimeout="00:10:00" sendTimeout="00:10:00" useDefaultWebProxy="false">
      <readerQuotas maxDepth="32" maxStringContentLength="2048000" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>
    </binding>
  </webHttpBinding>
</bindings>
<behaviors>
  <endpointBehaviors>
    <behavior name="json">
      <webHttp helpEnabled="false" automaticFormatSelectionEnabled="false" defaultBodyStyle="Bare"/>
    </behavior>
  </endpointBehaviors>
  <serviceBehaviors>
    <behavior name="">
      <serviceMetadata httpGetEnabled="true" httpGetBinding="webHttpBinding" httpGetBindingConfiguration=""/>
      <serviceDebug httpHelpPageEnabled="false" httpsHelpPageEnabled="false" includeExceptionDetailInFaults="true"/>
      <useRequestHeadersForMetadataAddress>
        <defaultPorts>
          <add scheme="http" port="80"/>
        </defaultPorts>
      </useRequestHeadersForMetadataAddress>
    </behavior>
  </serviceBehaviors>
</behaviors>
</system.serviceModel> 

我知道我错过了一些东西,但我无法弄清楚-有人有任何想法吗?

谢谢!

我发誓我应该等待 - 我经常在这里写问题然后相关的问题总是有我需要的答案。 这次没有发生,但是,当我输入web.config数据时,我发现了这个问题。 而不是删除这个问题,我想我会发布一个答案,希望能帮助别人。

问题出在服务名称上:

<services>
  <service name="SEO">

对于网站项目,规则是松散的,但Web应用程序需要适当的表示法。 我所做的只是改为:

<services>
  <service name="SEOPlatform.Intranet.SEO">

这解决了这个问题。 我还将multipleSiteBindingsEnabled更改为false,但如果您需要将其更改为true,则已在本网站的其他位置发布了很好的答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM