接受非由IIS托管的WCF Web服务的大型帖子

时间:2017-10-05 11:03:38

标签: c# .net web-services wcf

我正在尝试创建一个可以接受文件但不会在IIS上托管的Web服务(我计划将其作为独立服务运行)。我在这里找到了一个如何执行此操作的示例:https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/how-to-create-a-basic-wcf-web-http-service

使用上面的例子,我能够开始运行并且一切正常,直到我尝试将其设为“更大”的文件,此时我收到413错误,告诉我我的提交是大的。我做了一些搜索,发现有一个缓冲区和/或最大提交大小变量需要修改以允许更大的上传,这可以在App.config文件和/或web.config文件中完成。我的问题是我不熟悉这些文件的结构和我创建项目的方式,没有Web.config文件,我不知道App.config文件中必要的代码应该放在哪里。这是我到目前为止所拥有的。

WCF服务合同

case WM_NCHITTEST:
    {
        LRESULT r = DefWindowProc( hwnd, msg, wparam, lparam );
        if ( r == HTLEFT )
            r = HTTOP;
        else if ( r == HTTOP )
            r = HTLEFT;
        return r;
    }

这是启动“服务器/服务”主机的地方

[ServiceContract]
public interface IService
{
    [OperationContract]
    [WebGet(UriTemplate = "/{profile}/GetFileIfExists/{fileName}", ResponseFormat = WebMessageFormat.Json)]
    Stream GetFileIfExists(string fileName, string profile);

    [OperationContract]
    [WebInvoke(UriTemplate = "/{profile}/ReceiveFile",Method = "POST",BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)]
    string ReceiveFile(string profile, Stream ORU);
}

这是App.config文件中的当前内容。

ep = host.AddServiceEndpoint(typeof(IService), new WebHttpBinding(), "");
host.Open();
cf = new ChannelFactory<IService>(new WebHttpBinding(), "http://localhost:9000");
cf.Endpoint.Behaviors.Add(new WebHttpBehavior());

我是否需要创建Web.config或者我可以在App.config中放置必要的部分..如果是这样,我在哪里将它们放在文件中。我已经尝试在“”开头标记下面输入下面的代码而没有运气..但我确定我错过了一些明显的东西。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>
    </startup>
    <runtime>
       <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <dependentAssembly>
              <assemblyIdentity name="WebMatrix.Data" publicKeyToken="31bf3856ad364e35" culture="neutral" />
              <bindingRedirect oldVersion="0.0.0.0-1.0.0.0" newVersion="1.0.0.0" />
          </dependentAssembly>
       </assemblyBinding>
    </runtime>
</configuration>

1 个答案:

答案 0 :(得分:0)

根据stuartd的评论,我最终完成了这项工作,完全没有弄乱XML文件。相反,我只是直接在代码中设置绑定设置......他指示我使用以下article进行操作。

上面的代码改为:

host = new WebServiceHost(typeof(Service), new Uri("http://0.0.0.0:9000/"));
try
{
    var binding = new WebHttpBinding();
    binding.MaxReceivedMessageSize = Int32.MaxValue;
    binding.MaxBufferSize = Int32.MaxValue;
    ep = host.AddServiceEndpoint(typeof(IService), binding, "");
    host.Open();
    cf = new ChannelFactory<IService>(binding, "http://localhost:9000");
    cf.Endpoint.Behaviors.Add(new WebHttpBehavior());
    Log("Webservice started an listening on " + "http://0.0.0.0:9000/");
}