Я написал две функции, которые просто вычисляют 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;
}
Глядя на раздел 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»,
Обычные запросы 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
Как сказано в marc_s , REST Starter Kit может помочь, но вы также должны знать, что .NET 3.5 поддерживает службы REST непосредственно в нем. Это не так полно, как то, что вы можете сделать со стартовым комплектом, но оно полезно.
Это работает так: вы добавляете атрибут [WebGet]
в свои операции, чтобы указать, где в URL, по которому должны поступать различные параметры:
[WebGet(UriTemplate = "helloworld/{name}")]
string Helloworld(string name);
См. этот портал для получения тонны информации.
Обратите внимание: вы можете иметь ту же службу, что и SOAP и REST, если вы укажете несколько конечных точек / привязок конфигурация.