Azure Web 角色中的 WCF rest Web service - 404 错误

本文关键字:Web service 错误 rest WCF 角色 Azure | 更新日期: 2023-09-27 17:57:08

我已经通过堆栈交换进行了搜索,虽然有很多类似的问题,但我无法解决这个问题。我需要在 Azure Web 角色上运行 WCF Web 服务(因为我也在运行常规网页),而不是 Azure Web 服务角色。我已经设置了一个 WCF 服务并在 web.config 中定义了终结点,但我无法通过浏览器或客户端连接到终结点。下面是代码 - 如果有人可以建议可能出现的问题,将不胜感激。

鉴于下面的代码,我假设以下内容可以在浏览器中工作

http://127.0.0.1:81/testAPI.svc/store/

但我得到 404如果我只是指定

http://127.0.0.1:81/testAPI.svc

得到的页面告诉我我有一个网络服务。

ItestAPI.cs

namespace MvcWebRole1
{
    [ServiceContract]
    public interface ItestAPI
    {

        [OperationContract]
        [WebGet(UriTemplate = "store",
        RequestFormat = WebMessageFormat.Json,
        ResponseFormat = WebMessageFormat.Json,
        BodyStyle = WebMessageBodyStyle.Bare)]
        List<Financials> GetStoreActuals();
    }
}

testAPI.svc

namespace MvcWebRole1
{
    public class testAPI : ItestAPI
    {
            public List<Financials> GetStoreActuals()
            {
                return GetActuals();
            }
            private List<Financials> GetActuals()
            {
                List<Financials> Actuals = new List<Financials>
                {
                    new Financials
                    {
                    Store = "Store1", Profit = "10000000", Sales = "2000000"
                    },
                    new Financials
                    {
                    Store = "Store2", Profit = "20000000", Sales = "30000"
                    },
                    new Financials
                    {
                    Store = "Store3", Profit = "30000000", Sales = "4000000"
                    },
                    new Financials
                    {
                    Store = "Store4", Profit = "4000000", Sales = "500000"
                    },
                };
                return Actuals;
            }
    }
    [DataContract]
    public class Financials
    {
        [DataMember]
        public string Store { get; set; }
        [DataMember]
        public string Sales { get; set; }
        [DataMember]
        public string Profit { get; set; }

    }
}

最后是web.config中的服务模型

<system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="servicebehavior">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="restbehavior">
          <webHttp/>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <services>
      <service name ="MvcWebRole1.testAPI" behaviorConfiguration ="servicebehavior" >
        <endpoint name ="RESTEndPoint"
        contract ="MvcWebRole1.ItestAPI"
        binding ="webHttpBinding"
        address =""
        behaviorConfiguration ="restbehavior"/>
      </service>
    </services>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

非常感谢在这里提供的任何帮助!

Azure Web 角色中的 WCF rest Web service - 404 错误

我发现了以下内容:如果我使用上述类和配置设置WCFServiceWebRole,那么一切都完美运行。这只是尝试在 MCVWebRole 中运行上述内容时的问题。

在玩了MVCWebRole web.config之后,我终于让它工作了。正如您可能知道的那样,我是 .NET 的新手,但从我的 MVWWebRole 中删除以下内容解决了这个问题。我相信这会有后果,但至少我已经隔离了这个问题。

只是想我会分享以防它帮助其他人。

这是我删除的

<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true" />
    <handlers>
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%'Microsoft.NET'Framework'v4.0.30319'aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%'Microsoft.NET'Framework64'v4.0.30319'aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>

如果有人能告诉我是什么导致了问题,那将是有帮助的。谢谢