Ошибка при попытке использовать файл, возвращаемый службой WCF - PullRequest
1 голос
/ 14 июня 2009

Один из моих методов возвращает byte [] файла. Все остальные методы возвращают либо строковые объекты, либо пользовательские объекты

Я могу просматривать WSDL через браузер и, поскольку я использовал WCfExtras, я даже могу просматривать документацию.

В моем тестовом приложении, веб-приложении C #, я добавляю ссылку на мой svc, размещенный на тестовом сервере. Я получаю сообщение об ошибке:

     The document was understood, but it could not be processed.
  - The WSDL document contains links that could not be resolved.
  - There was an error downloading ...
  - Unable to connect to remote server
  - No connection could be made because the target machine actively refused it

    Content Type application/soap+xml; charset=utf-8 was not supported by service .  The client and service bindings may be mismatched.
    The remote server returned an error: (415) Cannot process the message because the content type 'application/soap+xml; charset=utf-8' was not the expected type 'text/xml; charset=utf-8'..
    If the service is defined in the current solution, try building the solution and adding the service reference again.

Это мой app.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <connectionStrings>
    <add name="TestApp.Properties.Settings.TestDBConnectionString"
      connectionString="Data Source=192.168.2.130;Initial Catalog=TestDB;Persist Security Info=True;User ID=sa;Password=xerox"
      providerName="System.Data.SqlClient" />
  </connectionStrings>
  <system.web>
    <compilation debug="true" />
  </system.web>
  <!-- When deploying the service library project, the content of the config file must be added to the host's 
  app.config file. System.Configuration does not support config files for libraries. -->
  <system.serviceModel>
    <services>
      <service behaviorConfiguration="TestApp.Service1Behavior"
        name="TestApp.SearchService">
        <endpoint address="" behaviorConfiguration="Sample.WsdlSampleEndpointBehavior"
          binding="basicHttpBinding" bindingConfiguration="WsHttpMtomBinding" contract="TestApp.ISearchService">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8731/TestApp/Service1/" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
       <endpointBehaviors>
        <behavior name="Sample.WsdlSampleEndpointBehavior">
          <wsdlExtensions location="http://localhost:8731/TestApp/Service1/"/>
        </behavior>
        </endpointBehaviors>
        <serviceBehaviors>
        <behavior name="TestApp.Service1Behavior">
          <!-- To avoid disclosing metadata information, 
          set the value below to false and remove the metadata endpoint above before deployment -->
          <serviceMetadata httpGetEnabled="True"/>
          <!-- To receive exception details in faults for debugging purposes, 
          set the value below to true.  Set to false before deployment 
          to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>

      </serviceBehaviors>
    </behaviors>
    <extensions>
      <behaviorExtensions>
        <!-- Declare that we have an extension called WSDL Extras-->
        <add name="wsdlExtensions" type="WCFExtras.Wsdl.WsdlExtensionsConfig, WCFExtras, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
      </behaviorExtensions>
    </extensions>
    <bindings>
      <basicHttpBinding>
        <binding name="WsHttpMtomBinding" messageEncoding="Mtom" transferMode="StreamedResponse" />
      </basicHttpBinding>
    </bindings>
  </system.serviceModel>
</configuration>

Любые идеи о том, как бы я решить это? Должны ли я иметь 2 разных привязки, одну для методов, возвращающих не bytes [] и Mtom для метода, возвращающего byte []? Если да, то как применять привязки для каждого метода?

Попробовал запустить его с WcfTestClient.exe, и это ошибка

rror: Cannot import wsdl:portTypeDetail: An exception was thrown while running a WSDL import extension: System.ServiceModel.Description.DataContractSerializerMessageContractImporterError: Schema with target namespace 'http://tempuri.org/' could not be found.XPath to Error Source: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:portType[@name='ISearchService']Error: Cannot import wsdl:bindingDetail: There was an error importing a wsdl:portType that the wsdl:binding is dependent on.XPath to wsdl:portType: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:portType[@name='ISearchService']XPath to Error Source: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:binding[@name='BasicHttpBinding_ISearchService']Error: Cannot import wsdl:portDetail: There was an error importing a wsdl:binding that the wsdl:port is dependent on.XPath to wsdl:binding: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:binding[@name='BasicHttpBinding_ISearchService']XPath to Error Source: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:service[@name='SearchService']/wsdl:port[@name='BasicHttpBinding_ISearchService']Warning: No code was generated.If you were trying to generate a client, this could be because the metadata documents did not contain any valid contracts or servicesor because all contracts/services were discovered to exist in /reference assemblies. Verify that you passed all the metadata documents to the tool.Warning: If you would like to generate data contracts from schemas make sure to use the /dataContractOnly option.

Ответы [ 5 ]

1 голос
/ 10 апреля 2011

У меня такая же проблема. Я размещал wcf на удаленном сервере win2008 на IIS. Решение, которое сработало для меня, заключалось в установке имени хоста при добавлении веб-сайта и не оставляйте его пустым после настройки всех других данных для хостинга!

0 голосов
/ 29 сентября 2009

Ответ для меня, чтобы я мог использовать тестовый клиент WCF, состоит в том, чтобы установить set singleFile = "true" в веб-конфигурации следующим образом.

<behavior name="Sample.WsdlSampleEndpointBehavior">
      <wsdlExtensions location="http://localhost:8731/TestApp/Service1/" singleFile="true" />
 </behavior>
0 голосов
/ 15 июня 2009

Ваша привязка - basicHttpBinding, но ваша конфигурация привязки - wsHttpMTOMBinding.

Это выглядит как несоответствие, однако это могут быть только имена, которые вы дали вещам.

Попробуйте открыть файл конфигурации в инструменте конфигурации WCF, это должно сказать вам (отказывается открывать файл), если в вашем файле конфигурации есть несоответствия.

Надеюсь, это поможет

Шираз

0 голосов
/ 15 июня 2009

Это не может быть верным ответом, но после того, как я удалил ссылки WCfExtras из моего файла app.config и развернул, кажется, что все работает.

Это то, чего я пытался достичь, но заброшенный на время

WCF Дополнительно

Если у кого-то есть представление о том, как и что я настроил неправильно, сообщите об этом в колонку.

Большое спасибо

0 голосов
/ 14 июня 2009

В клиентском приложении есть ссылка на сборку WCFExtras? Кажется, ошибка говорит о том, что привязка не распознана, что, как я полагаю, связано с расширениями, введенными WCFExtras. Попробуйте добавить тот же раздел расширений в файл конфигурации вашего клиента, что и в файле конфигурации сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...