После создания службы wcf, как я могу сказать, является ли ее restful или мыло из wsdl? - PullRequest
4 голосов
/ 20 июня 2011

Я создал сервис, и мне открылась страница со словами:

Вы создали сервис.

Чтобы протестировать этот сервис, вам нужно будет создать клиенти использовать его для вызова службы.Вы можете сделать это с помощью инструмента svcutil.exe из командной строки со следующим синтаксисом:

Но как мне узнать, является ли это SOAP или REST-сервисом из этого?Как бы я сказал из wsdl и т. Д.?

Конфигурация службы:

<services> 
    <service name="VLSContentService"
             behaviorConfiguration="VLSContentServiceBehaviour" > 
        <endpoint name="rest" 
            address="" 
            behaviorConfiguration="VLSContentServiceEndpointBehaviour" 
            binding="webHttpBinding" 
            contract="IVLSContentServiceREST" /> 
        <endpoint name="soap" 
            address="soap" 
            binding="basicHttpBinding" 
            contract="IVLSContentServiceREST"/> 
    </service> 
</services>

ОБНОВЛЕНИЕ:

Привет Марк,

Моя конфигурация:

 <services>
      <service behaviorConfiguration="VLSContentServiceBehaviour" name="VLSContentService">
        <endpoint name="rest" address="" behaviorConfiguration="VLSContentServiceEndpointBehaviour" binding="webHttpBinding" contract="IVLSContentServiceREST" />
        <endpoint name="soap" address="soap" binding="basicHttpBinding" contract="IVLSContentServiceREST"/>
      </service>
    </services>

Так что в основном я просматриваю файл .svc и вижу ссылку на wsdl.Но как я узнаю, что это для конечной точки SOAP или REST.Я даже правильно его настроил?

Спасибо

ОБНОВЛЕНИЕ: 17:49 (ВЕЛИКОБРИТАНИЯ)

<system.serviceModel>

  <!---Add the service-->
  <services>
    <service behaviorConfiguration="VLSContentServiceBehaviour" name="VLSContentService">
       <endpoint name="rest" 
           address="" 
           behaviorConfiguration="VLSContentServiceEndpointBehaviour" 
           binding="webHttpBinding" 
           contract="IVLSContentServiceREST" />
    </service>
 </services>
 <!---Add the behaviours-->
 <behaviors>
    <serviceBehaviors>
       <behavior name="VLSContentServiceBehaviour">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
       </behavior>
    </serviceBehaviors>
    <endpointBehaviors>
       <behavior name="VLSContentServiceEndpointBehaviour">
         <webHttp />
       </behavior>
    </endpointBehaviors>
  </behaviors>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="false" />
</system.serviceModel>

marc_s ОБНОВЛЕНИЕ: 18:22 (ВЕЛИКОБРИТАНИЯ))

Пит, попробуйте это - без публикации метаданных, ничего - просто webHttpBinding - вы должны не видеть больше WSDL ...

<system.serviceModel>
   <services>
      <service name="VLSContentService">
          <endpoint name="rest" 
              address="" 
              binding="webHttpBinding" 
              contract="IVLSContentServiceREST" />
      </service>
   </services>
   <serviceHostingEnvironment aspNetCompatibilityEnabled="false" />
</system.serviceModel>

Ответы [ 2 ]

5 голосов
/ 20 июня 2011

Служба может быть как REST, так и SOAP. Таким образом, служба WCF может иметь несколько конечных точек , включая и SOAP и REST.,На WSDL конечные точки SOAP будут отображаться в элементе wsdl: definitions / wsdl: service / wsdl: port;конечные точки REST не будут.Поэтому, если у вас есть только одна конечная точка в службе, если в WSDL есть запись wsdl: port, то это конечная точка SOAP;в противном случае это REST.

Вы можете запустить приведенный ниже код и посмотреть на wsdl, чтобы увидеть, что он показывает только один элемент wsdl: port для конечной точки SOAP.

public class StackOverflow_6414181
{
    [ServiceContract]
    public interface ITest
    {
        [OperationContract]
        [WebGet]
        string Echo(string text);
    }
    public class Service : ITest
    {
        public string Echo(string text)
        {
            return text;
        }
    }
    public static void Test()
    {
        string baseAddress = "http://" + Environment.MachineName + ":8000/Service";
        ServiceHost host = new ServiceHost(typeof(Service), new Uri(baseAddress));
        host.Description.Behaviors.Add(new ServiceMetadataBehavior { HttpGetEnabled = true });
        host.AddServiceEndpoint(typeof(ITest), new BasicHttpBinding(), "soap");
        host.AddServiceEndpoint(typeof(ITest), new WebHttpBinding(), "rest").Behaviors.Add(new WebHttpBehavior());
        host.Open();
        Console.WriteLine("Host opened");

        Console.Write("Press ENTER to close the host");
        Console.ReadLine();
        host.Close();
    }
}
4 голосов
/ 20 июня 2011

Если у вас есть WSDL - это сервис SOAP.

REST не имеет WSDL.

REST имеет аналогичную концепцию под названием WADL -Язык описания веб-приложений ( спецификация WADL в формате PDF ) - но это не так хорошо известно и широко используется в качестве WSDL для SOAP.

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