Конфигурирование конечных точек WCF JSONP и SOAP, прослушивание по одному и тому же URI - PullRequest
0 голосов
/ 15 января 2011

Я JSONP включил мой WCF ServiceContract.Клиент успешно вызывает сервис JSONP (OperationContract).У меня есть ряд других OperationContracts (использующих тот же ServiceContract), которые я хочу представить, используя конечную точку basicHttpBinding (SOAP) - используя тот же URI.Я думаю, что мой сервис WebConfig настроен правильно.При этом я должен добавить ссылку на службу (прокси), используя диалоговое окно VS «Добавить ссылку на службу»?Или мне нужно вручную генерировать код клиента в codebehind?Если мне нужно сделать это вручную, кто-нибудь может привести пример?Или моя служба WebConfig настроена неправильно?Я звоню в службу JSONP, используя это: http://Flixsit:1000/FlixsitWebServices.svc/jsonp

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

<system.serviceModel>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" />
<behaviors>
  <endpointBehaviors>
    <behavior name="webHttpBehavior">
      <webHttp />
    </behavior>
  </endpointBehaviors>
  <serviceBehaviors>
    <behavior name="DefaultBehaviors">          
      <serviceMetadata httpGetEnabled="true" />          
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<bindings>
  <webHttpBinding>
    <binding name="JSONPBinding" crossDomainScriptAccessEnabled="true" />
  </webHttpBinding>
  <basicHttpBinding>
    <binding name="SOAPBinding" />
  </basicHttpBinding>
</bindings>
<services>
  <service name="Flixsit.Services.FlixsitWebServices" behaviorConfiguration="DefaultBehaviors">
    <clear />
    <endpoint name="JSONPEndPoint" address="jsonp"
                                   binding="webHttpBinding"
                                   bindingConfiguration="JSONPBinding"
                                   contract="Flixsit.Services.IFlixsitWebServices"
                                   behaviorConfiguration="webHttpBehavior" />
    <endpoint name="HttpEndPoint"  address=""
                                   binding="basicHttpBinding"
                                   bindingConfiguration="SOAPBinding"
                                   contract="Flixsit.Services.IFlixsitWebServices" />
    <host>
      <baseAddresses>
        <add baseAddress="http://Flixsit:1000/FlixsitWebServices.svc" />
      </baseAddresses>
    </host>
  </service>
</services>    

1 Ответ

0 голосов
/ 15 января 2011

После некоторого времени я создаю ChannelFactory, как показано ниже (в коде ниже).Сервисы теперь доступны на обеих конечных точках.

try
    {
        EndpointAddress address = new EndpointAddress("http://Flixsit:1000/FlixsitWebServices.svc");
        WSHttpBinding binding = new WSHttpBinding();
        ChannelFactory<IFlixsitWebServices> factory = new ChannelFactory<IFlixsitWebServices>(binding, address);
        IFlixsitWebServices channel = factory.CreateChannel();

        //call the service operation  
        var customer = channel.GetCustomers();

        GridView1.DataSource = customer;
        GridView1.DataBind();

        //close the channel
        ((ICommunicationObject)channel).Close();

        //close factory
        factory.Close();
    }
    catch (Exception ex)
    {
        //log ex;
    }
...