我已经创建了WCF
服务,并且在部署之后无法对其进行测试。这是我用来测试它的PowerShell:
$service = New-WebServiceProxy -Uri http://localhost:16651/Service.svc
$service.GetList()
使用Visual Studio
从F5
调试服务时,我可以毫无问题地调用此脚本。 GetList()
会返回一长串电话号码。
但是,当我在IIS上托管该站点并运行上述脚本时,我得到一个空返回值。
因此,在this question之后,我将此属性添加到Service.svc
:
Factory="System.ServiceModel.Activation.WebScriptServiceHostFactory"
然而,这导致我的脚本在第一行返回错误:
New-WebServiceProxy:未将对象引用设置为对象的实例。
这对我没有任何意义,因为我没有引用任何空对象...(在调试和通过IIS托管时出现此错误)。
接下来,我尝试根据链接的问题更新我的web.config
:
<services>
<service name="LyncWebService.Service">
<endpoint binding="webHttpBinding" contract="LyncWebService.IService" behaviorConfiguration="web"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="web">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
但是,现在当我尝试运行我的PowerShell脚本时,我在调试期间和在IIS上托管时都会出现此错误(同样在第一行):
HTML文档不包含Web服务发现信息。
我完全迷失在这里,不知道出了什么问题。我怀疑这是与我的配置文件有关,因为它在我调试配置之前从VS调试时似乎工作。
非常感谢任何帮助或指导 - 如果我能提供任何其他信息或测试任何内容,请告诉我。
以下是目前构成我的服务的代码:
namespace LyncWebService
{
[ServiceContract]
public interface IService
{
[OperationContract]
[WebInvoke]
List<string> GetList();
}
public class Service : IService
{
public List<string> GetList()
{
return Ps.GetAssignedNumbers(@"
Set-ExecutionPolicy RemoteSigned
Import-Module Lync
$(Get-CSUser).LineUri"
);
}
}
}
<?xml version="1.0"?>
<configuration>
<appSettings/>
<system.web>
<compilation debug="true" targetFramework="4.0"/>
<httpRuntime/>
</system.web>
<system.serviceModel>
<services>
<service name="LyncWebService.Service">
<endpoint binding="webHttpBinding" contract="LyncWebService.IService" behaviorConfiguration="web"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="web">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
<protocolMapping>
<!--<add binding="basicHttpsBinding" scheme="https"/>-->
<add binding="webHttpsBinding" scheme="https"/>
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="false" multipleSiteBindingsEnabled="true"/>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<!--
To browse web app root directory during debugging, set the value below to true.
Set to false before deployment to avoid disclosing web app folder information.
-->
<directoryBrowse enabled="true"/>
</system.webServer>
</configuration>
答案 0 :(得分:2)
感谢Jonathan Coffey,我意识到该服务是由LocalSystem
帐户运行的。
将此更改为我自己的用户帐户并在web.config
上托管原始IIS
后,我现在可以使用PowerShell脚本检索完整列表。