我在服务器IIS上有一个基本的WCF服务,SQL db也位于其中。
在本地运行它时,它可以正常工作,并且所有服务功能都可以正常工作,但是一旦我发布到服务器IIS,我就会得到
The server encountered an error processing the request. Please see the service help page for constructing valid requests to the service.
仅当我调用/ function
如果我只是转到开始页面,则找不到终点,这与我本地的终点相同。
这是我的service.svc的样子
using System.ServiceModel;
using System.ServiceModel.Web;
using System.ServiceModel.Activation;
using System.Web.Script.Services;
using Newtonsoft.Json.Linq;
namespace myNameSpace
{
[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Service
{
/// <summary>
/// ....
/// </summary>
/// <returns>string</returns>
[WebInvoke(UriTemplate = "/NextWeek", Method = "GET")]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string nextWeek()
{
return db.Instance.getNextWeek();
}
//this continues for awhile and is basically the same type of functions
}
}
我还创建了一个global.asax
public class Global : HttpApplication
{
void Application_Start(object sender, EventArgs e)
{
RouteTable.Routes.Add(new ServiceRoute("", new WebServiceHostFactory(), typeof(Service)));
}
}
这是我的web.config
我最初遇到404错误,但是我设法解决了该错误,表明它的服务没有终点。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<!--
For a description of web.config changes see http://go.microsoft.com/fwlink/?LinkId=235367.
The following attributes can be set on the <httpRuntime> tag.
<system.Web>
<httpRuntime targetFramework="4.5" />
</system.Web>
-->
<system.web>
<compilation targetFramework="4.6" />
<pages controlRenderingCompatibilityVersion="4.0" />
</system.web>
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
<standardEndpoints>
<webHttpEndpoint>
<!--
Configure the WCF REST service base address via the global.asax.cs file and the default
endpoint via the attributes on the <standardEndpoint> element below
-->
<standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true" />
</webHttpEndpoint>
</standardEndpoints>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior">
<!--
To avoid disclosing metadata information, set the value below to false and remove the
metadata endpoint above before deployment
-->
<serviceMetadata httpGetEnabled="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="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
<connectionStrings>
.....
</connectionStrings>
</configuration>
我已经尝试了一些在Microsoft网站上找到的配置选项,但是并没有帮助。
谢谢。
答案 0 :(得分:1)
我注意到您使用ORM框架返回数据库条目。如果该服务在本地而非服务器上正常运行,则在我看来数据库连接有问题,请尝试检查连接字符串,避免使用Windows Integrated Security连接数据库。
除此之外,这是我的有关托管Restful风格wcf服务的代码段。
服务器(wcf服务应用程序)
[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json)]
Product GetProduct(int ID);
public Product GetProduct(int ID)
{
TestStoreEntities entities = new TestStoreEntities();
return entities.Products.FirstOrDefault(x => x.Id == ID);
}
配置。
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpsGetEnabled="true" httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
<dataContractSerializer maxItemsInObjectGraph="2147483647" />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior>
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
<protocolMapping>
<add binding="webHttpBinding" scheme="http" />
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
连接字符串。
<connectionStrings><add name="TestStoreEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string="data source=10.157.18.36;initial catalog=TestStore;persist security info=True;user id=sa;password=123456;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
请随时告诉我是否有什么可以帮忙的。