【问题标题】:C# self hosted web service: can´t upload files larger than 60kC# 自托管 Web 服务:无法上传大于 60k 的文件
【发布时间】:2014-02-24 19:16:06
【问题描述】:

在我的自托管网络服务中,我有一个服务器方法来接收上传的图像:

[System.ServiceModel.OperationContract, WebInvoke(UriTemplate = "MalaDireta/saveImage")]
string MD_saveImage(Stream arq);

public string MD_saveImage(Stream img) {
        try {
            Image i = Image.FromStream(img);

            //Here I just show received image in a PictureBox
            new ImageTest(i).ShowDialog();
        }
        catch (Exception ex) {
            MessageBox.Show("Exception:\n" + ex.ToString());
        }
        return "test";
}

使用以下 App.config 文件:

<?xml version="1.0"?>
<configuration>
<system.serviceModel>
<bindings>
</bindings>
<services>
  <service name="WebService.RestService" behaviorConfiguration="Default">
    <host>
      <baseAddresses>
      </baseAddresses>
    </host>
    <endpoint address="" binding="webHttpBinding" behaviorConfiguration="webBehavior" contract="WebService.ICarga"></endpoint>
  </service>
</services>
<behaviors>
  <endpointBehaviors>
    <behavior name="webBehavior">
      <webHttp />
    </behavior>
  </endpointBehaviors>
  <serviceBehaviors>
    <behavior name="Default">
      <serviceMetadata httpGetEnabled="true"/>
      <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
    </behavior>
  </serviceBehaviors>
</behaviors>
</system.serviceModel>
<startup>
  <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>

以及上传图片的客户端方法如下(客户端没有App.config):

    Image img = Image.FromFile("fileName");
    MemoryStream ms = new MemoryStream();
    img.Save(ms, ImageFormat.Png);

    Uri uri = new Uri("http://m.y.i.p:port/MalaDireta/saveImage");

    WebClient client = new WebClient();
    ms.Position = 0;
    try {
        client.UploadData(uri, ms.ToArray());
    }
    catch (Exception exc) {
        MessageBox.Show("Error at insertion.\n Exception: " + exc.ToString());
    }

只要图像大小不超过 60k,它就可以完美运行。否则,我会收到“错误 400:错误请求”,在这种情况下,服务器方法甚至不会启动(我在方法开始时尝试使用 MessageBox)。我试图在服务器 App.Config 中更改一些东西但没有运气(可能是由于我对配置文件缺乏了解)。 谁能告诉我如何上传更大的文件?

提前致谢。

【问题讨论】:

  • 这应该可以解决这个例子是 wcf 的问题,但是对于你想要完成的事情必须有一个类似的绑定。 stackoverflow.com/questions/884235/…
  • 谢谢,@vikingben。但仍然给我同样的错误。
  • 我要扔掉的另一件事。我有一个类似的问题,我在 wcf web 服务上传图像时遇到了问题,一周后我发现错误不在 web 服务端,但我不得不更改客户端应用程序上的配置。也许值得一试。我在绑定的 app.config 中对 max message 使用了相同的方法。祝你好运。
  • 再次感谢@vikingben。你知道我在哪里可以找到客户端配置文件的示例吗?以前从未使用过,我服务器中的那个只是我发现的一个稍微修改的示例。
  • @vikingben 我找到了客户端 App.config 的示例。它使用端点标签处的服务器地址。但我必须在 webclient.uploadData 方法中定义服务器地址。 webclient 将如何“使用”App.config?

标签: c# web-services file-upload upload self-hosting


【解决方案1】:

您可以在配置文件中配置最大接收消息大小。欲了解更多信息,请使用以下链接。

http://msdn.microsoft.com/en-us/library/ms731361.aspx

【讨论】:

  • 感谢您的回答。但我已经尝试更改为 maxReceivedMessageSize="2000000000" maxBufferSize="2000000000" maxBufferPoolSize="2000000000" 仍然没有运气,给了我同样的“错误 400:错误请求”
猜你喜欢
  • 2020-03-01
  • 2014-05-27
  • 2013-05-24
  • 2014-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多