Конфигурация привязки веб-службы WCF не применяется - PullRequest
4 голосов
/ 02 ноября 2010

У меня есть веб-служба WCF под названием «Palladium», которая создается как проект в решении VS2008.
У меня есть веб-приложение ASP.Net, которое размещает эту службу на странице с именем «Palladium.svc».
Когда я публикую данные формы в веб-сервисе, мой сервис получает эти данные и может с ними что-то делать.

Теперь я публикую изображения в сервисе, и размер сообщения превышает значение по умолчанию WCF maxReceivedMessageSize собственность.Чтобы обойти это, я добавил конфигурацию привязки к конечной точке файла web.config веб-приложения ASP.Net.

Моя проблема в том, что конфигурация привязки, кажется, не применяется.

Служба публикуется из приложения для iPhone, а когда размер сообщения меньше 65 Кб, сервис работает нормально.Как только размер сообщения превышает этот размер, я получаю ошибку 400 (неверный запрос).
В целях тестирования я создал файл test.aspx в своем веб-приложении ASP.Net, в котором некоторые значения форм и изображение отправляются в веб-службу.,Опять же, когда размер сообщения ниже 65 КБ по умолчанию, сервис работает нормально.За 65к и мне обслужили 400 ошибок.

Тестовая страница публикует URL-адрес, соответствующий следующему URITemplate /job-photo/{photoId}/{palladiumId}/{jobId}

Если кто-то может помочь мне отладить эту проблему, будет очень признателен.

Разметка для Тестовая страница :

        <html xmlns="http://www.w3.org/1999/xhtml" >
        <head runat="server">
            <title></title>
        </head>
        <body>
            <form id="form1" action="http://localhost/cds/resources/services/palladium.svc/job-photo/1/235DE168-5D1C-46A4-89F2-FD17C6B9F415/567" method="post" enctype="multipart/form-data">
            <div>
                <input type="text" name="user" value="joe bloggs" />

                <input type="file" name="photo" />
                <input type="submit" name="btnsubmit" value="submit" />
            </div>
            </form>
        </body>
        </html>

Сервисная информация от web.config :

     <system.serviceModel>
       <bindings>
         <wsHttpBinding>
           <binding name="large_message_binding" maxBufferPoolSize="5242880" maxReceivedMessageSize="5242880">
             <readerQuotas maxStringContentLength="5242880" maxArrayLength="5242880" maxBytesPerRead="5242880" />
           </binding>
         </wsHttpBinding>
       </bindings>

       <behaviors>
       <serviceBehaviors>
        <behavior name="CDS.UI.Resources.Services.PalladiumBehavior">
         <serviceMetadata httpGetEnabled="true" />
         <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
       </serviceBehaviors>
      </behaviors>

      <services>
       <service behaviorConfiguration="CDS.UI.Resources.Services.PalladiumBehavior"
        name="CDS.UI.Resources.Services.Palladium">
        <endpoint address="" binding="wsHttpBinding" bindingConfiguration="large_message_binding" contract="CDS.PalladiumService.IPalladium">

         <identity>
          <dns value="localhost" />
         </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
       </service>
      </services>

     </system.serviceModel>

Разметка от Palladium.svc

    <%@ ServiceHost Language="C#" Debug="true" Service="CDS.PalladiumService.Palladium" Factory="System.ServiceModel.Activation.WebServiceHostFactory" %>

1 Ответ

4 голосов
/ 02 ноября 2010

Насколько я понимаю,

Service="CDS.PalladiumService.Palladium"

должен ссылаться на базовый тип.

Как и атрибут имени здесь:

<service behaviorConfiguration="CDS.UI.Resources.Services.PalladiumBehavior"
    name="CDS.UI.Resources.Services.Palladium">

Если вы назначите ихк фактическому типу базового класса обслуживания это решает вашу проблему?

...