我的ASP.NET网站从App_Code中的代码调用.net服务来检索一些信息。
网络服务托管在http://mydomain/ws/DirectoryService.asmx
。
每当我在任何服务器上部署一个网站,然后在托管所需的.net服务的同一台服务器上,一切都运行良好。
每当我将网站部署到托管Web服务的同一个Web服务器时,我都会收到401.1错误。
我在网站的web.config中定义了以下绑定:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="LR Directory ServiceSoap" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None" realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://mydomain/ws/DirectoryService.asmx" binding="basicHttpBinding" bindingConfiguration="LR Directory ServiceSoap" contract="ExpertsServiceReference.LRDirectoryServiceSoap" name="LR Directory ServiceSoap" />
</client>
</system.serviceModel>
显然,问题在于绑定。它无法在同一台服务器中运行。如何解决问题?
P.S。如果我在web.config中注释掉绑定,那么网站加载正常,但它不能完全正常运行,因为它无法连接到服务。
更新:一个非常重要的细节:我的目标网站和.net服务都位于同一台服务器上,同一个IIS,但是绑定到不同的外部IP地址,因此问题不在网络中访问领域。
此外,如果我将网站的身份验证模式从Anonymous设置为Windows,一切正常,但每次访问网站时我都需要提供一个Windows信用卡。
答案 0 :(得分:1)
问题解决了。事实证明,我需要编辑匿名身份验证设置,以便在使用时(在我的情况下总是如此),代码将在应用程序池的标识下,而不是IUSR:
答案 1 :(得分:0)
确保您在不同的端口上运行Web服务和网站,并确保您的配置反映了正确的端口。
如果您在同一端口上运行两个网站(默认情况下这将是端口80,为HTTP保留),它们将相互冲突 - 其中一个将获得端口,另一个不会。
假设您将Web服务端口更改为8080,您将配置站点以使用端点:
address="http://mydomain:8080/ws/DirectoryService.asmx"