wcf - 在WCF中为非自定义绑定定义maxReceivedMessageSize时如何使用ServiceRoutes

原文 标签 wcf asp.net-mvc-3

编辑此内容以重新关注实际问题。我将原始问题保留在消息的底部,但更改标题和内容以反映实际情况。

我需要重写通过ServiceRoute机制添加到MVC3项目的WCF服务的maxReceivedMessageSize。在web.config中指定绑定无效。如何做到这一点。



最初的问题在这条线以下,但由于我看到的许多误报而具有误导性。

嗨,我使用了一些示例来向我的MVC3项目添加文件流上传服务。如果我使用默认绑定(即未在web.config中定义),则该服务将起作用,只要我不超过64k的默认大小即可。当我尝试定义自己的绑定以增加大小时,响应中出现内容类型不匹配的情况,响应中出现HTTP415不支持的媒体类型。我试图通过HTTP通过提琴手来调用它,而不使用WCF客户端。
这是跟踪中的错误:

Content Type image/jpeg was sent to a service expecting multipart/related;type="application/xop+xml".  The client and service bindings may be mismatched.


这是web.config服务模型部分

 <system.serviceModel>
<behaviors>
  <endpointBehaviors>
    <behavior name="NewBehavior0" />
  </endpointBehaviors>
</behaviors>
<services>
  <service name="AvyProViewer.FileService">
    <endpoint address="UploadFile" binding="basicHttpBinding" bindingConfiguration=""
      contract="AvyProViewer.FileService"  />
  </service>
</services>

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/>
<bindings>
  <basicHttpBinding>
    <binding name="NewBinding0" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"
      messageEncoding="Mtom" transferMode="StreamedRequest">
      <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
        maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
    </binding>
  </basicHttpBinding>
</bindings>




这是服务:

[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class FileService
{      
    [OperationContract]
    [WebInvoke(Method = "POST", UriTemplate = "UploadFile")]       
    public string UploadFile(Stream fileStream)       
    {
        string path = HostingEnvironment.MapPath("~");  
        string fileName = Guid.NewGuid().ToString() + ".jpg";
        FileStream fileToupload = new FileStream(path + "\\FileUpload\\" + fileName, FileMode.Create);

        byte[] bytearray = new byte[10000];
        int bytesRead, totalBytesRead = 0;
        do
        {
            bytesRead = fileStream.Read(bytearray, 0, bytearray.Length);
            totalBytesRead += bytesRead;
        } while (bytesRead > 0);

        fileToupload.Write(bytearray, 0, bytearray.Length);
        fileToupload.Close();
        fileToupload.Dispose();
        return fileName;
    }
}


这是我在MVC3路由中公开它的位置:

public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.Add(new ServiceRoute("FileService", new WebServiceHostFactory(), typeof(FileService)));
        . . .
}

最佳答案

我认为问题出在绑定中mtommessageEncoding声明。尝试将messageEncoding更改为Text

相关文章:

sql-server - 找不到请求的.Net Framework数据提供程序。它可能没有安装。 -当跟随mvc3 asp.net教程时

jquery - 具有动态添加字段的客户端验证

.net - 使用WCF(https)时,WSDL超链接中的URL错误

wcf - 如何在app.config文件中定义端点?

c# - WebOperationContext.Current.OutgoingResponse.StatusCode不起作用

c# - 剃刀@ {…} vs @调用RenderPartial

c# - WCF自托管应用程序和名称空间保留

c# - WCF是否使用ThreadPool为PerCall服务启动新实例?

c# - MVC3中的WebGrid列格式问题

c# - 如何在ASP.NET MVC视图中获取对象属性的子字符串?