gpt4 book ai didi

c# - 服务仅在调试时有效

转载 作者:行者123 更新时间:2023-11-30 23:20:42 25 4
gpt4 key购买 nike

我已经创建了一个 WCF 服务,但在部署后对其进行测试时遇到了一些问题。这是我用来测试它的 PowerShell:

$service = New-WebServiceProxy -Uri http://localhost:16651/Service.svc
$service.GetList()

当使用 F5Visual Studio 调试服务时,我可以毫无问题地调用此脚本。 GetList() 返回一长串电话号码。

但是,当我在 IIS 上托管站点并运行上述脚本时,我得到了一个 返回值。


服务工厂

接着this question ,我将此属性添加到 Service.svc:

Factory="System.ServiceModel.Activation.WebScriptServiceHostFactory"

但是,这导致我的脚本在第一行返回错误:

New-WebServiceProxy : Object reference not set to an instance of an object.

这对我来说没有任何意义,因为我没有引用任何空对象...(调试和通过 IIS 托管时会出现此错误)。


Web.Config

接下来,我尝试根据链接的问题更新我的 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 上托管时都遇到了这个错误(同样在第一行):

The HTML document does not contain Web service discovery information.


我完全迷失在这里,不知道出了什么问题。我怀疑这与我的配置文件有关,因为在我弄乱配置之前从 VS 调试时它似乎确实有效。

非常感谢任何帮助或指导 - 如果我可以提供任何其他信息或测试任何内容,请告诉我。

这是目前构成我的服务的代码:

服务.svc.cs

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"
);
}
}
}

Web.Config

<?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>

最佳答案

感谢 Jonathan Coffey,我意识到该服务正在由 LocalSystem 帐户运行。

将其更改为我自己的用户帐户并在 IIS 上托管原始 web.config 后,我现在可以使用我的 PowerShell 脚本检索完整列表。

  1. 打开 IIS
  2. 应用程序池
  3. 右键单击应用程序池
  4. 高级设置...
  5. 流程模型 -> 身份
  6. 自定义帐户(不要忘记包含用户名的域!)

关于c# - 服务仅在调试时有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39637457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com