当前位置:编程学习 > C#/ASP.NET >>

wcf 发布问题(iis 宿主)

WCF部署到服务器上,在客户端浏览器里访问如下地址
http://192.x.x.x/mobilephone/service.svc
可以正常访问,页面返回
svcutil.exe http://计算机名/MobilePhone/Service.svc?wsdl

在客户端程序调用服务的时候(添加服务引用,输入
http://192.x.x.x/mobilephone/service.svc 地址,点击【前往
】,会提示 无法远程访问 计算机名 

请问如何解决,谢谢

----

Service.svc
<%@ ServiceHost language="c#" Debug="true" Service="IfaceService.ClassService" %>

----
web.config

  <system.serviceModel>
    <services>
      <service behaviorConfiguration="ServiceBehavior" name="IfaceService.ClassService">
        <endpoint address="basic" binding="basicHttpBinding" contract="IfaceService.InterfaceService">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="ServiceBehavior">
          <!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false 并删除上面的元数据终结点  -->
          <serviceMetadata httpGetEnabled="true"/>
          <!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息-->
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>


---- --------------------编程问答-------------------- 。。。招兵买马都回来了,还没人回复,已向三个版主求助了,这人呢? --------------------编程问答-------------------- endpoint 少东西哦。

我就纳闷了,默认的WCF Service Application模板默认的配置,为啥删来删去的? --------------------编程问答-------------------- 等等看走眼了,

lz在IIS上是以WebApplication发布的吗?还是以Site发布 --------------------编程问答--------------------
引用 3 楼 fangxinggood 的回复:
等等看走眼了,

lz在IIS上是以WebApplication发布的吗?还是以Site发布



发布的时候在IIS 建立的WebApplication --------------------编程问答-------------------- 整个步骤,应该是这样,开发的时候,

在原有的WCF项目里,添加 WCF 服务站点 项目,

WCF服务站点项目添加 WCF服务项目的引用。

然后编辑.SVC和 编辑WCF配置

最后点发布网站~~~


发布以后的程序,我都部署到另一台IIS服务器, 

IIS,添加虚拟目录,指向真实目录


大概步骤就是以上 --------------------编程问答--------------------
引用楼主 summercat 的回复:
WCF部署到服务器上,在客户端浏览器里访问如下地址
http://192.x.x.x/mobilephone/service.svc
可以正常访问,页面返回
svcutil.exe http://计算机名/MobilePhone/Service.svc?wsdl

再确认下:
现在是用机器名引用不了呢?还是用IP引用不了? --------------------编程问答--------------------
引用 6 楼 fangxinggood 的回复:
引用楼主 summercat 的回复:
WCF部署到服务器上,在客户端浏览器里访问如下地址
http://192.x.x.x/mobilephone/service.svc
可以正常访问,页面返回
svcutil.exe http://计算机名/MobilePhone/Service.svc?wsdl

再确认下:
现在是用机器名引用不了呢?还是用IP引用不了?



正常来讲我是希望在客户度通过IP的,在我的客户端程序添加服务引用

http://192.x.x.x/mobilephone/service.svc

点击 前往,就提示

无法远程访问 计算机名,

就好像点击前往以后,真正的服务地址解析成了服务器的计算机名,这样客户端肯定不能访问了,

如果直接在IE里访问 

http://192.x.x.x/mobilephone/service.svc

页面返回
svcutil.exe http://计算机名/MobilePhone/Service.svc?wsdl

再点击

http://计算机名/MobilePhone/Service.svc?wsdl

也是访问不了~~

--------------------编程问答-------------------- 直接在浏览器里:http://192.x.x.x/mobilephone/service.svc?wsdl 呢?

你这个问题感觉是客户端 Hosts 文件的映射问题。可以搜搜看。 --------------------编程问答--------------------
引用 8 楼 fangxinggood 的回复:
直接在浏览器里:http://192.x.x.x/mobilephone/service.svc?wsdl 呢?

你这个问题感觉是客户端 Hosts 文件的映射问题。可以搜搜看。


会显示 XML 文件,但是XML文件最后

-<wsdl:service name="ClassService">-<wsdl:port name="BasicHttpBinding_InterfaceService" binding="tns:BasicHttpBinding_InterfaceService"><soap:address location="http://newoem/mobilephone/Service.svc/basic"/></wsdl:port></wsdl:service>


newoem 是服务器计算机名,如果在项目里直接添加引用 

http://192.x.x.x/mobilephone/service.svc?wsdl 

点击前往 也是相同的错误~~ --------------------编程问答-------------------- 多谢,我也在找,我在服务器的 hosts文件里 添加 服务器计算机名和 IP 对应关系,但是问题依旧 --------------------编程问答-------------------- 路过  不会 --------------------编程问答-------------------- 有了一点变化,我在服务器 web.config 里增加一行,就是默认的那个节点配置


<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />


然后客户端程序添加服务引用的时候,点击前往,会显示我的服务。。。

IfaceService.ClassService,添加以后,调用具体方法的时候,

SRF1.InterfaceServiceClient  tc=new SRF1.InterfaceServiceClient();

tc.save(..具体参数);

跟踪会提示


没有终结点在侦听可以接受消息的 http://newoem/Phone/Service.svc。这通常是由于不正确的地址或者 SOAP 操作导致的


添加应用可以正常了,但是具体调用方法的时候还是会报错,还是不识别服务器计算机名,为什么会显示计算机名而不是IP呢,头疼。。。

--------------------编程问答-------------------- 这个倒是可以手动修改的,你可以到客户端app.config里,把机器名改为IP。

--------------------编程问答--------------------
引用 13 楼 fangxinggood 的回复:
这个倒是可以手动修改的,你可以到客户端app.config里,把机器名改为IP。


按你说的手动修改了,但是新的问题又出现了,

调用方法的时候,提示 

调用方未由服务进行认证

我暂时改由webservice实现,这个问题有时间在研究,暂不结贴,到时候研究的时候再继续~~~
--------------------编程问答-------------------- svcutil.exe http://计算机名/MobilePhone/Service.svc?wsdl

在VS命令行中输入命令,生成文件完成后根据提示将代理生成对象拷贝到CLIENT项目中然后创建对象然后调用就好了.
好象也可以宿主代理服务,就是把服务和运行服务分开,客户端只与运行服务的宿主联系.
不懂,用不上也没学.
--------------------编程问答-------------------- WCF发布目录的文件夹权限设置:一要Web共享,二要给ASP.NET用户(IUSER)足够的权限 --------------------编程问答-------------------- 太恶性了,我也是这个问题,用毛线机器名。配置也不会配,搜了半天也没答案。发泄一下 --------------------编程问答-------------------- 如果你用的IIS7就要注意了,我用IIS7也出现逆列举的情况,我从5楼的步骤得到灵感:解决方法是:
在web.config文件中的<configuration>节点中加入如下:

<!-- 
      在 Internet 信息服务 7.0 下运行 ASP.NET AJAX 时 system.webServer 节
      是必需的。而对于早期版本的 IIS,此节并不是必需的。
  -->
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules>
      <remove name="ScriptModule" />
      <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    </modules>
    <handlers>
      <remove name="WebServiceHandlerFactory-Integrated"/>
      <remove name="ScriptHandlerFactory" />
      <remove name="ScriptHandlerFactoryAppServices" />
      <remove name="ScriptResource" />
      <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode"
           type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode"
           type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    </handlers>
  </system.webServer> --------------------编程问答-------------------- 服务消费者的配置文件就可以是:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <bindings>
            <wsHttpBinding>
                <binding name="WSHttpBinding_IService1" />
            </wsHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://127.0.0.1:9995/CalculatorService.svc"
                      binding="wsHttpBinding" 
                      contract="Contract.ICalcuator"
                      name="calcutorService" />
        </client>
    </system.serviceModel>
</configuration> --------------------编程问答--------------------
引用 19 楼 weikai20007 的回复:
服务消费者的配置文件就可以是:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <bindings>
            <wsHttpBinding>
                <binding name="WSHtt……

+1 --------------------编程问答-------------------- hosts机器名和IP映射你为嘛在服务器添加呢?在客户端添加。。。 --------------------编程问答-------------------- 请参照:http://blog.sina.com.cn/s/blog_752ca76a010184dy.html 谢谢
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,