Привязать WCF к методу веб-сервиса

#c# #asp.net #web-services #wcf

#c# #asp.net #веб-сервисы #wcf

Вопрос:

У меня есть веб-сервис, размещенный в IIS по адресу: http://localhost:4100/FilesService.asmx и в этом сервисе есть метод:

 [WebMethod]
        public dataModel.FileInfo AddFileInBase64(string ObjectType, string objectInBase64) //AuthenticationData
        {
         ...some code...
        }
 

И у меня есть служба WCF, которая получает некоторые данные, из этой службы WCF я хочу отправить эти данные в веб-службу, поэтому я добавляю ссылку на службу http://localhost:4100/FilesService.asmx?wsdl , и это делается точно, в файле WebConfig , который он добавляет:

 <system.serviceModel>
<bindings>
  <basicHttpBinding>
    <binding name="Service1Soap" closeTimeout="00:01:00" openTimeout="00:01:00"
      receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false"
      bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
      maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
      messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
      useDefaultWebProxy="true">
      <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
      <security mode="None">
        <transport clientCredentialType="None" proxyCredentialType="None"
          realm="" />
        <message clientCredentialType="UserName" algorithmSuite="Default" />
      </security>
    </binding>
  </basicHttpBinding>
  <customBinding>
    <binding name="Service1Soap12">
      <textMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16"
        messageVersion="Soap12" writeEncoding="utf-8">
        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
          maxBytesPerRead="4096" maxNameTableCharCount="16384" />
      </textMessageEncoding>
      <httpTransport manualAddressing="false" maxBufferPoolSize="524288"
        maxReceivedMessageSize="65536" allowCookies="false" authenticationScheme="Anonymous"
        bypassProxyOnLocal="false" decompressionEnabled="true" hostNameComparisonMode="StrongWildcard"
        keepAliveEnabled="true" maxBufferSize="65536" proxyAuthenticationScheme="Anonymous"
        realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false"
        useDefaultWebProxy="true" />
    </binding>
  </customBinding>
</bindings>
<client>
  <endpoint address="http://localhost:8080/FilesService.asmx" binding="basicHttpBinding"
    bindingConfiguration="Service1Soap" contract="ServiceReference1.Service1Soap"
    name="Service1Soap" />
  <endpoint address="http://localhost:8080/FilesService.asmx" binding="customBinding"
    bindingConfiguration="Service1Soap12" contract="ServiceReference1.Service1Soap"
    name="Service1Soap12" />
</client>
 

но когда я хочу сделать:

 ServiceReference1.Service1SoapClient sc = new ServiceReference1.Service1SoapClient();
sc.AddFileInBase64("type", Convert.ToBase64String(dataByteArray));
 

в моем файле WCF .svc.cs я получаю:

 Could not find default endpoint element that references 
contract 'ServiceReference1.Service1Soap' in the ServiceModel client
configuration section. This might be because no configuration file
was found for your application, or because no endpoint element matching
this contract could be found in the client element.
 

ServiceReference1.Service1Soap является ли интерфейс:

введите описание изображения здесь
введите описание изображения здесь

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

Ответ №1:

Как я вижу в ваших кодах. неясно, является ли 'ServiceReference1.Service1Soap' это интерфейсом или самой реализацией.

Итак, если это не интерфейс вашей службы wcf, вам следует изменить его на имя вашего интерфейса службы wcf.

Ответ №2:

У вас есть две конечные точки, и вам нужно определить, какую конечную точку вы хотите использовать

 ServiceReference1.Service1SoapClient sc = new     ServiceReference1.Service1SoapClient("BasicHttpBinding_IService1SoapClient");
sc.AddFileInBase64("type", Convert.ToBase64String(dataByteArray));
 

Комментарии:

1. пробовал также: «Service1Soap», «Service1Soap12», «ServiceReference1.Service1Soap» это не помогло @edit: я также удалил одну из конечных точек, все ту же самую

2. Я могу добавить, что метод, в котором я использую эту ссылку, имеет свойство: [OperationContract, WebInvoke(UriTemplate = «uploadFile/{fileName}», BodyStyle = WebMessageBodyStyle . Завернутый)] если это что-нибудь изменит