Создание веб-сервиса WCF работать с ПОЛУЧАЕТ запросы

Я написал две функции, которые просто вычисляют totalTime из DateInterval. Точность может быть увеличена с учетом лет и месяцев.

function getTotalMinutes(DateInterval $int){
    return ($int->d * 24 * 60) + ($int->h * 60) + $int->i;
}

function getTotalHours(DateInterval $int){
    return ($int->d * 24) + $int->h + $int->i / 60;
}
41
задан Community 23 May 2017 в 12:18
поделиться

3 ответа

Глядя на раздел web.config serviceModel, я вижу, что вам нужно добавить webHttpBinding и связать endPointBehavior, включающий webHttpGet .

Ваш рабочий контракт правильный. Вот как должен выглядеть раздел конфигурации system.serviceModel, чтобы вы могли использовать службу из HTTP-запроса GET.

<system.serviceModel>     
    <behaviors>
        <serviceBehaviors>
            <behavior name="MyServiceBehavior">
                <serviceMetadata httpGetEnabled="true"    />
                <serviceDebug includeExceptionDetailInFaults="true"/>          
            </behavior>
        </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="WebBehavior">
          <webHttp />
        </behavior>
      </endpointBehaviors>
    </behaviors>    
    <services>      
      <service behaviorConfiguration="MyServiceBehavior" name="MyService">
        <endpoint address="ws" binding="wsHttpBinding" contract="IMyService"/>
        <endpoint address="" behaviorConfiguration="WebBehavior"
                  binding="webHttpBinding"
                  contract="IMyService">
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>    
</system.serviceModel>

Обязательно назначьте другой адрес своей конечной точке wsHttpBinding, иначе вы получите сообщение об ошибке у вас есть две конечные точки, прослушивающие один и тот же URI.

Другой вариант - оставить адрес в wsHttpBinding пустым, но назначить другой адрес службе webHttpBinding. Однако это также изменит ваш адрес GET.

Например, если вы назначите адрес как «asmx»,

46
ответ дан 27 November 2019 в 00:49
поделиться

Обычные запросы WCF всегда являются запросами SOAP - вы не сможете добиться этого только в своем браузере. , для этого вам понадобится WCF Testclient.

Существует надстройка для WCF, называемая WCF REST Starter Kit (которая также будет включена в WCF 4.0 с .NET 4.0), которая позволяет использовать HTTP-команды GET / POST / PUT / DELETE для запроса служб WCF и т.п. Однако вам нужно писать свои службы специально для REST - вы не можете использовать SOAP и REST в одном вызове службы.

Marc

6
ответ дан 27 November 2019 в 00:49
поделиться

Как сказано в marc_s , REST Starter Kit может помочь, но вы также должны знать, что .NET 3.5 поддерживает службы REST непосредственно в нем. Это не так полно, как то, что вы можете сделать со стартовым комплектом, но оно полезно.

Это работает так: вы добавляете атрибут [WebGet] в свои операции, чтобы указать, где в URL, по которому должны поступать различные параметры:

[WebGet(UriTemplate = "helloworld/{name}")]
string Helloworld(string name);

См. этот портал для получения тонны информации.

Обратите внимание: вы можете иметь ту же службу, что и SOAP и REST, если вы укажете несколько конечных точек / привязок конфигурация.

4
ответ дан 27 November 2019 в 00:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: