我可以从同一个Windows服务托管WCF和Web服务吗?

时间:2012-01-19 16:29:04

标签: .net wcf

我在Windows服务中运行WCF服务。这工作正常,我能够向服务器发送/接收肥皂消息。

问题是我还希望能够从同一个服务(或更具体地来自同一个端口)访问静态文件(简单下载),这样只需要一个端口可以访问互联网。

使用我现有的服务,我有以下方法:

public interface IMyServerService
{
    [OperationContract]
    [WebInvoke]
    string ListValue(string arg1);
}

我现在尝试添加以下内容:

    [OperationContract]
    [WebGet(BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "/DownloadFile")]
    System.IO.Stream DownloadFile();

通过以下实施:

    public System.IO.Stream DownloadFile()
    {
        var context = System.ServiceModel.Web.WebOperationContext.Current.OutgoingResponse;

        context.Headers.Add(System.Net.HttpResponseHeader.CacheControl, "public");
        context.ContentType = "text/plain";
        context.StatusCode = System.Net.HttpStatusCode.OK;

        return new System.IO.FileStream(@"C:\test.txt", System.IO.FileMode.Open, System.IO.FileAccess.Read);
    } // End of DownloadFile

我的目标是访问https://service/DownloadFile,但当我尝试时,我收到错误400。

我想我的问题是,我可以在同一个WCF服务中执行此操作,还是应该创建第二个服务?

1 个答案:

答案 0 :(得分:1)

您可以设置正确的绑定(例如新功能的webHttpBinding)。问题是,你呢?通常,ServiceContract将某些功能组合在一起。如果此文件下载是与现有服务无关的新内容,我将创建一个新文件。