Цель: мне нужно отправить серию отчетов об испытаниях из группы автоматизированных серверов в базу данных. Сценарии тестирования находятся на питоне, а не открываются, что может червей. Я хочу настроить сценарий Powershell, чтобы выполнить завершенные тесты в службе WCF.Как Powershell может использовать службу REST службы WCF через IIS?
У меня есть существующий веб-сайт ASP.NET, который управляет отчетами и строит из него, я хотел бы добавить простую службу WCF, доступ к которой можно получить через автоматизацию. Кажется, я бегу в стены, и чувствую, что я очень близок к тому, чтобы это работало. Я работаю над этой проблемой в течение нескольких дней, и мои глаза начинают кровоточить, читая веб-сайты, пытаясь найти соответствующую помощь.
Service Code:
namespace TrendDB.Web
{
[ServiceContract]
public interface ITrendRestService
{
[OperationContract]
[WebGet]
string GetTestMessage();
}
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class TrendRestService : ITrendRestService
{
public string GetTestMessage()
{
return "Success!";
}
}
}
Web.config (только уместна информация показана):
<system.web>
...
<authentication mode="Windows" />
<authorization>
<deny users="?" />
</authorization>
...
</system.web>
...
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="restfulBehavior">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
<services>
<service name="TrendDB.Web.TrendRestService">
<endpoint address="" behaviorConfiguration="restfulBehavior"
binding="webHttpBinding" bindingConfiguration="" contract="TrendDB.Web.ITrendRestService">
</endpoint>
</service>
</services>
</system.serviceModel>
Я испытал это, как работает в моем браузере, как http://localhost/trenddb/TrendRestService.svc/GetTestMessage
и сообщение, которое пришло через было:
<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">Success!</string>
IIS 7.5 был создан с использованием BKM из MS для использования MVC роли authoriza для интрасети. На сайте установлен определенный пул приложений, а сервер настроен в домене с использованием проверки подлинности Windows.
Мои первые звонки в Powershell начал как:
$trend = New-WebServiceProxy -uri http://localhost/trenddb/TrendRestService.svc
New-WebServiceProxy : The request failed with HTTP status 401: Unauthorized.
Это хорошо, так как по крайней мере, это консервированный ответ на анонимный доступ, поэтому я добавил -UseDefaultCredential
в команду и получил:
$trend = New-WebServiceProxy -uri http://localhost/trenddb/TrendRestService.svc -UseDefaultCredential
New-WebServiceProxy : Object reference not set to an instance of an object.
Я попытался с помощью GetTestMessage
WebInvoke просто чтобы посмотреть, что случилось:
$trend = New-WebServiceProxy -uri http://localhost/trenddb/TrendRestService.svc/GetTestMessage -UseDefaultCredential
New-WebServiceProxy : The document at the url
http://localhost/trenddb/TrendRestService.svc/GetTestMessage was not recognized as a known document type.
The error message from each known type may help you fix the problem:
- Report from 'WSDL Document' is 'There is an error in XML document (1, 2).'.
- <string xmlns='http://schemas.microsoft.com/2003/10/Serialization/'> was not expected.
- Report from 'XML Schema' is 'The root element of a W3C XML Schema should be <schema> and its namespace should be 'http://www.w3.org/2001/XMLSchema'.'.
- Report from 'DISCO Document' is 'Discovery document at the URL http://localhost/trenddb/TrendRestService.svc/GetTestMessage could not be found.'.
- The document format is not recognized.
Из моего браузера звоните в WCF. Я знаю, что <string xmlns='http://schemas.microsoft.com/2003/10/Serialization/'>
был именно тем, чего я ожидаю ... поэтому теперь мне нужно выяснить, что требуется для подключения к этой службе WCF REST.
Редактировать: Использование утилиты svcutil.exe создает прокси-сервер, но пропускает файл конфигурации. Ли строка serviceMetadata httpGetEnabled="true"
означает, что я создаю метаданные, используемые для клиента WCF? Будет ли этот эффект PS?
Просто проверьте, что вы не используете консоль PS в качестве администратора, не так ли? Интересно, вызывает ли это 'DefaultCredential'. –
Захват запроса, сделанного из вашего веб-браузера с помощью Fiddler, а затем аналогичным образом захватить запрос от PS и сравнить их, чтобы узнать, какая разница существует, что вызывает проблему. – Rajesh
@SrikanthVenugopalan - Я не запускаю его как Admin, я попробовал его снова как Admin и те же сообщения/поведение. –