WCF部署到服务器上后可以引用,但无法调用

采菇娘的小蘑菇 2012-03-13 08:54:04
我将一个WCF部署到本地IIS上,运行很正常,项目要上线了,我给部署到服务器上,将WCF的端口8089加入到防火墙的例外名单中了,于是我新建一个控制台应用程序,添加服务引用,在Main方法中进行调用,出问题了,非常郁闷,下面是我的WCF配置文件
<system.serviceModel>
<services>
<service name="BeerGroup.MessageService.BeerGroupMessageService">
<endpoint address="" binding="wsHttpBinding" contract="BeerGroup.MessageService.IBeerGroupMessageService">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
<host>
<baseAddresses>
<add baseAddress="http://58.177.188.198:8089/BeerGroup.MessageService.BeerGroupMessageService.svc"/>
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>

这种写法在本地IIS里没问题的,服务器用的是server 2008
下面附上几个错误截图
图1:创建代理类对象,并调用方法

图2:点击图1中的详细信息

我头大了半天了,搞了半天硬是调用不成功,为啥本地IIS可以呢?
而且我在添加引用里WCF的.svc文件路径我写的明明是IP,我调用的时候大家看下图2中的异常信息,硬是把服务器IP换成计算机名称了,不知道我只能访问这个地址不能调用这个服务跟这有没有关系?
...全文
896 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
不好意思,我给忘了,有个贴子没结,就只能给你33分了
  • 打赏
  • 举报
回复
谢谢“青龙白虎”,我是这么解决的,虽然在你写这个贴子之前我已经解决了,不过我也是这么做的,问题解决了,给你100分!
qldsrx 2012-03-13
  • 打赏
  • 举报
回复
刚才开始我就一直在意一个问题,你明明是控制台程序,怎么也访问BeerGroupMessageService.svc这个文件?
新建控制台程序后,访问的地址就不应该是某个文件,而应该是虚拟地址,例如直接使用http://58.177.188.198:8089/的形式即可。
至于实际访问的服务地址,是在这个节点配置的:
<endpoint address="" binding="wsHttpBinding" contract="BeerGroup.MessageService.IBeerGroupMessageService">
你这里address="",说明是和基地址相同,不同的情况下可以这样指定:address="BeerGroupMessageService"
这样,你的服务地址就是http://58.177.188.198:8089/BeerGroupMessageService
当然,你也可以在这里指定一个绝对地址,例如:address="http://58.177.188.198:12345/"
看到了吗,连端口都变了,引用时使用的是8089,实际提供服务用了12345端口。
lmj820129 2012-03-13
  • 打赏
  • 举报
回复
1,IE 直接调用服务,看应用情况。
2,命令行生成代理类,是需要修改的
3,如果还不行看IIS是否做了扩展名映射
  • 打赏
  • 举报
回复

我直接使用wsdl命令来生成代理类,IP也被解析成了计算机名
qldsrx 2012-03-13
  • 打赏
  • 举报
回复
你只要把引用的服务端放到其它电脑上,一个无法从主机名访问的地址上,肯定不会自动变,这也算是调试的小BUG吧,微软优先用主机名代替IP,但是稍微懂点的人都能自己修改这部分内容,直接在生成的一堆代码里找到那个cs文件修改,同时查看生成的配置文件,一并修改,这不难,我第一次用WCF就去修改它自动产生的CS类文件了。
当然,现在一般使用共享接口dll的方式来创建客户端代理,这样创建的客户端程序更灵活,可以自主控制连接协议,连接地址,否则实在太死。
  • 打赏
  • 举报
回复
主要是地址中的IP怎么会自动变成计算机名的
我添加引用的时候明明是添加的IP地址引用
调用服务的时候IP自动变成了计算机名
我在地址栏中以IP地址的形式来进入我这个WCF地址可以进入
如果把IP换成计算机名
就访问不了了
不知道什么情况
貌似是在解析上有问题
并不是程序配置问题
哪位大哥知道原因呢
我个人感觉不是WCF配置问题了

qldsrx 2012-03-13
  • 打赏
  • 举报
回复
你的地址错了,对外地址明明是58.177.188.198,你却用了主机名,那个主机名是你本地调试的时候默认使用的,但是项目发布后肯定不能,必须用IP地址或者域名,这个必须你自己手动修改配置文件(或cs文件)
蓝色韵脚 2012-03-13
  • 打赏
  • 举报
回复
设置下IIS
如下图:
crazy_blue 2012-03-13
  • 打赏
  • 举报
回复
服务端有个调试的配置,还有你用浏览器打开服务的地址,错误在上面就有
mathieuxiao 2012-03-13
  • 打赏
  • 举报
回复
你的<dns value="localhost"/>看上去有点别扭
ttllxx 2012-03-13
  • 打赏
  • 举报
回复
有没有做端口映射?

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧