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发布 --------------------编程问答--------------------
发布的时候在IIS 建立的WebApplication --------------------编程问答-------------------- 整个步骤,应该是这样,开发的时候,
在原有的WCF项目里,添加 WCF 服务站点 项目,
WCF服务站点项目添加 WCF服务项目的引用。
然后编辑.SVC和 编辑WCF配置
最后点发布网站~~~
发布以后的程序,我都部署到另一台IIS服务器,
IIS,添加虚拟目录,指向真实目录
大概步骤就是以上 --------------------编程问答--------------------
再确认下:
现在是用机器名引用不了呢?还是用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 文件的映射问题。可以搜搜看。 --------------------编程问答--------------------
会显示 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。
--------------------编程问答--------------------
按你说的手动修改了,但是新的问题又出现了,
调用方法的时候,提示
调用方未由服务进行认证
我暂时改由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> --------------------编程问答--------------------
+1 --------------------编程问答-------------------- hosts机器名和IP映射你为嘛在服务器添加呢?在客户端添加。。。 --------------------编程问答-------------------- 请参照:http://blog.sina.com.cn/s/blog_752ca76a010184dy.html 谢谢
补充:.NET技术 , C#