我正在为项目添加新的WCF服务,但新项目与旧项目的行为不同。
每个都有一个类似的SVC文件:
library(grid)
library(gridExtra)
# example data & header row
tab <- tableGrob(mtcars[1:3, 1:4], rows=NULL)
header <- tableGrob(mtcars[1, 1:2], rows=NULL, cols=c("head1", "head2"))
jn <- combine(header[1,], tab, along=2)
jn$widths <- rep(max(jn$widths), length(jn$widths)) # make column widths equal
#grid.newpage()
#grid.draw(jn) # see what it looks like before altering gtable
# change the relevant rows of gtable
jn$layout[1:4 , c("l", "r")] <- list(c(1, 3), c(2, 4))
grid.newpage()
grid.draw(jn)
每个都有一个定义ServiceContract和OperationContracts的接口:
<%@ ServiceHost Language="C#" Debug="true" Service="Company.Project.Service1" %>
每个都在web.config文件中定义:
[ServiceContract]
[ServiceKnownType(typeof(Service1))]
public interface IService1
{
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "json/method1", RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
ResponseObject Method1(RequestObject req);
}
但是,当我使用Chrome浏览器在我的一个预生产环境中访问原始服务的网址时,我看到了我期望的“方法不允许”错误(因为我正在使用GET)。
当我访问新服务时,收到404错误:
<service name="Company.Project.Service1" behaviorConfiguration="ServiceBehavior">
<endpoint address="rest" binding="webHttpBinding" contract="Company.Project.IService1" behaviorConfiguration="web"/>
<endpoint address="soap" binding="basicHttpBinding" contract="Company.Project.IService1"/>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
另一个奇怪的是它在我之前的预生产环境中有效,所以它可能只是部署过程中的一部分。
答案 0 :(得分:1)
我发现你的方法叫做Method1,但是你试图进入method2
您的网络配置是否还有针对endpointBehavior的部分,如下所示。您需要它来为您的webHttpBinding启用REST端点。您可能应该添加服务行为
<behaviors>
<endpointBehaviors>
<behavior name="web">
<webHttp/>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="web">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
答案 1 :(得分:1)
确保您在Global.asax文件中为已在现有项目中添加的新服务定义了路由。这可能很容易被遗漏,导致无法通过托管环境中的Asp.net pipline找到资源。
因此,如果您有新版本的服务,请说ApiService2,您需要添加如下条目:
routes.Add(new ServiceRoute("api2", new ServiceHostFactory(), typeof(ApiService2)));