我正在尝试创建一个可以接受文件但不会在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>
答案 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/");
}