我在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服务中执行此操作,还是应该创建第二个服务?
答案 0 :(得分:1)
您可以设置正确的绑定(例如新功能的webHttpBinding)。问题是,你呢?通常,ServiceContract将某些功能组合在一起。如果此文件下载是与现有服务无关的新内容,我将创建一个新文件。