0

我有一个非常基本的 WCF 服务,我想在 IIS 上作为 RESTful 服务运行。这是服务合同。

[ServiceContract]
interface IRestCameraWs
{
   [OperationContract]
   [WebGet(UriTemplate = "/cameras/{username}",ResponseFormat = WebMessageFormat.Xml,
            BodyStyle = WebMessageBodyStyle.Wrapped)]
   CameraInfo[] GetUserCameras(string username);

   [OperationContract]
   [WebGet(UriTemplate = "/liveimage/{cameraId}",ResponseFormat = WebMessageFormat.Xml,
            BodyStyle = WebMessageBodyStyle.Wrapped)]
   byte[] GetLiveImage(int cameraId);

   //void GetLatestImage(int cameraId, out DateTime timestamp, out byte[] image);

   [OperationContract]
   [WebGet(UriTemplate = "/latestimage/{cameraId}", ResponseFormat = WebMessageFormat.Xml,
            BodyStyle = WebMessageBodyStyle.Wrapped)]
   string GetLatestImageUrl(int cameraId);
}

有一个实现这个契约的类叫做StopMotion.Business.WCFService.RestCameraWs. 然后我.svc在我的 web 项目中添加了一个带有以下标记的文件。

<%@ ServiceHost Service="StopMotion.Business.WCFService.RestCameraWsBase"%>

当我导航到此服务 url 时,它会显示服务主页和指向 wsdl 定义的链接。但是,当我在web.config文件中添加配置以配置此服务时,webHttpBinding我从 IIS express 收到以下错误页面。

在此处输入图像描述

首先,我认为我在配置方面做错了。后来我删除了配置,只是在 svc 文件中更改了工厂,例如

<%@ ServiceHost Factory="System.ServiceModel.Activation.WebServiceHostFactory" Service="StopMotion.Business.WCFService.RestCameraWsBase"%>

WebServiceHostFactory据说webHttpBinding默认使用,我们不需要在配置中添加它,除非我们需要更多的东西。但是更改工厂也会导致 IIS Express 上出现相同的错误页面。

有什么想法吗?

4

2 回答 2

1

查看我的配置,我记得我必须在 web.config 中声明端点并在行为中启用 WebScript。部分结果看起来有点像:

    <endpoint address="json" binding="webHttpBinding" contract="svcservice.svc.IAuthsvc" bindingConfiguration="bc.svcservice.svc.AuthsvcJSON" behaviorConfiguration="epb.svcservice.svc.AuthsvcJSON"/>      
    .
    .
    .
    .
    <behavior name="epb.svcservice.svc.AuthsvcJSON">
      <enableWebScript/>
    </behavior>

希望这会有所帮助

于 2012-04-13T07:39:53.253 回答
0

问题出在我的方法签名上。我们只能string包含包含在其中的类型参数,UriTemplate而某些方法接受int如下类型的参数。

[OperationContract]
        [WebGet(UriTemplate = "/latestimage/{cameraId}",ResponseFormat = WebMessageFormat.Xml,
            BodyStyle = WebMessageBodyStyle.Wrapped)]
        string GetLatestImageUrl(int cameraId);

当我在 vs 开发服务器上调试它时,它为我在线放置了错误,但似乎即使在开发环境中,在 IIS Express 中观察错误也更加困难。

于 2012-04-13T08:02:42.313 回答