Редактирование, чтобы переориентироваться на актуальную проблему. Я сохранил оригинальный вопрос в нижней части сообщения, но изменил название и содержание, чтобы отразить то, что действительно происходило.
Мне нужно переопределить maxReceivedMessageSize для службы WCF, добавленной в проект MVC3 через механизм ServiceRoute. Указание привязки в web.config не работает. Как это сделать.
Первоначальный вопрос находится ниже этой линии, но вводит в заблуждение из-за множества ложных срабатываний, которые я видел.
Привет! Я использовал несколько примеров для добавления службы загрузки потокового файла в мой проект MVC3. Если я использую привязки по умолчанию (то есть, не определенные в web.config), служба работает до тех пор, пока я не превышаю размер по умолчанию в 64 КБ. Когда я пытаюсь определить собственную привязку для увеличения размера, я получаю несоответствие типов содержимого в своей трассировке и неподдерживаемый тип носителя HTTP415 в ответе. Я пытаюсь вызвать это через Fiddler через 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)));
. . .
}