热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

我做了一个普通的WCF服务程序,就是嵌入普通窗体的那种服务,如何使用花生壳

如何使用花生壳,让我在别的电脑上也能得到这个程序的服务,请高手帮忙回答下,用的是VB.NET做的
如何使用花生壳,让我在别的电脑上也能得到这个程序 的服务,请高手帮忙回答下,用的是VB.NET做的

42 个解决方案

#1


你把承载服务的那台电脑的wcf所用的端口打开,在防火墙里面设置就行。
然后找花生壳弄一个二级域名或者域名,将你的服务地址改为这个域名下的,花生壳的软件会自动把这个域名解析到你的动态公网IP上。

#2


我XP的防火墙都是关闭的,那么默认情况下,8731端口是打开的吗,还是另外要设置

#3


如果防火墙是关闭的,也没用路由器,那就不用设置了.

#4


如果是办公室里的局域网呢?怎么办?

#5


引用 4 楼 ssss8111 的回复:
如果是办公室里的局域网呢?怎么办?

你说的是承载wcf服务的那台对吧?我怀疑这种情况下你那台机器上的花生壳是否还能检测到公网地址,如果可以检测到,那需要在办公室的路由器上对你这台机器作端口映射。

#6


哎,一谈到端口映射我就焉了,办公室的路由器我能做的了吗,而且怎么做也是问题

#7


也不一定,我见过一个公司(名字忘了)可以为局域网内的机器做动态域名解析,不需要设置路由器,原理估计就是先进行vpn连接,然后由他们公司的服务器转发。你可以问问花生壳现在是否有这种方案。

#8


WCF服务端配置文件中,设置为LOCALHOST:8731 和 设置为 10.50.179.224:8731,假如这个是主机的IP,这2种设置有什么区别?

#9


10.50.179.224是局域网地址吧?对公网来说没区别,都不能用.这两种地址在socket下会有区别,在wcf下,对局域网来说没区别。

#10


引用 8 楼 ssss8111 的回复:
WCF服务端配置文件中,设置为LOCALHOST:8731 和 设置为 10.50.179.224:8731,假如这个是主机的IP,这2种设置有什么区别?

你的服务端中写这两个地址都可以,但局域网之外的客户端必须写公网地址或者域名.

#11


我问的意思在于 服务端是不是只在乎端口,不在乎IP吧,就算是该主机的IP是公网固定IP,那么服务端写上 LOCALHOST:8731, 客户端也可以通过 10.50.179.224:8731 ,假如这个是那个主机的公网IP,客户端也可以通过这个IP和端口 访问这个服务吧

#12


引用 11 楼 ssss8111 的回复:
我问的意思在于 服务端是不是只在乎端口,不在乎IP吧,就算是该主机的IP是公网固定IP,那么服务端写上 LOCALHOST:8731, 客户端也可以通过 10.50.179.224:8731 ,假如这个是那个主机的公网IP,客户端也可以通过这个IP和端口 访问这个服务吧

#13


我的家里是 有线通网络,配合无线路由器,自动获取IP上网的那种,如何设置花生壳端口映射?

#14


有线通就是有线电视那种同轴电缆是吧?那个我猜测也是局域网的吧,没有独立公网地址,比办公室还难弄.你通过网络连接查看一下是否有独立的公网地址.

#15


先直接连到电脑上,不经过路由器,通过电脑网络连接看下地址.

#16


哎,昏头了,本来好不容易做了个WCF数据库服务,想在外网用用瞧的,白辛苦了,恐怕我这回事搞不好了,还有别的方法没?购买花生壳什么服务可以轻松做到外网访问?

#17


花生壳如果没有vpn方案,能解决的问题就必须符合两个条件,
1、有独立的公网地址,或者可以设置具有独立公网地址的路由器的端口映射;
2、这个公网地址必须是动态的,因为如果不是动态的,就不需要花生壳了,可以直接使用。

找个用ADSL拨号的宽带试试看。

#18



            
          

再问个问题,这玩意,就是DNS,啥回事,服务端中需要有这个吗?客户端需要有吗,客户端好像我怎么加布进去

#19


不需要,这是花生壳的域名解析服务器

#20


我看默认生成的WCF代码中,有也 这个,只不过值是 LOCALHOST,所以想问问,这个东西需要设置吗,有什么用吗

#21


还想问个技术问题,在默认生成的代码配置中,好像一次传输的数量是很小的,那么可以在这种模式下用STREAM传输大文件吗,还是必须改为绑定来传输大文件?

#22


我做wcf没设置过这个。我猜想这个东西的作用可能是把服务地址通过这个指定的DNS服务解析到网卡上,因为在wcf服务中写公网地址、局域网地址、localhost都是可以的。socket要让外网访问,就必须写网卡的局域网地址。瞎猜的,具体你查查吧。

#23


引用 21 楼 ssss8111 的回复:
还想问个技术问题,在默认生成的代码配置中,好像一次传输的数量是很小的,那么可以在这种模式下用STREAM传输大文件吗,还是必须改为绑定来传输大文件?

设置binding的maxReceivedMessageSize="2147483647"

#24


我知道可以设置这个来传输大文件,只是想问,如果在限制传输大文件的情况下,可以通过用 STREAM的方法来传大文件吗,这个不是一次传一点点,我看网上代码,传输大文件都是用 STREAM方法的,在这种方法里,一次传输的量不大吧,那么这个时候还是要设置maxReceivedMessageSize吗?

#25


引用 24 楼 ssss8111 的回复:
我知道可以设置这个来传输大文件,只是想问,如果在限制传输大文件的情况下,可以通过用 STREAM的方法来传大文件吗,这个不是一次传一点点,我看网上代码,传输大文件都是用 STREAM方法的,在这种方法里,一次传输的量不大吧,那么这个时候还是要设置maxReceivedMessageSize吗?

如果没有分包,一次性传输,那就得设置这个了.

#26


那么大文件如何分包传输?那种传输STREAM的方法,不属于分包传输方法吗?

#27


那方法是什么能贴出来看看吗

#28


 public void HelloStreamed(string source, string destination)
   {
   try
   {
   var proxy = new MessageSvc.Streamed.StreamedClient();
  
   var sr = new System.IO.FileStream(
   source, System.IO.FileMode.Open);
  
   proxy.UploadFile(destination + Path.GetFileName(source), sr);
  
   sr.Close();
   proxy.Close();
  
   MessageBox.Show("上传成功");
   }
   catch (Exception ex)
   {
   MessageBox.Show(ex.ToString());
   }
   }
   }
  }

#29


需要在你路由器上做端口映射的设定,和花生壳没有直接关系

#30


using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Text;
  
  using System.ServiceModel;
  using System.IO;
  
  namespace WCF.ServiceLib.Message
  {
   /**//// 
   /// 消息契约(定义与 SOAP 消息相对应的强类型类)
   /// 
   [MessageContract]
   public class FileWrapper
   {
   /**//// 
   /// 指定数据成员为 SOAP 消息头
   /// 
   [MessageHeader]
   public string FilePath;
  
   /**//// 
   /// 指定将成员序列化为 SOAP 正文中的元素
   /// 
   [MessageBodyMember]
   public Stream FileData;
   }
  
   /**//// 
   /// IStreamed接口
   /// 
   [ServiceContract]
   public interface IStreamed
   {
   /**//// 
   /// 上传文件
   /// 
   /// 
   /// 1、支持数据流传输的绑定有:BasicHttpBinding、NetTcpBinding 和 NetNamedPipeBinding
   /// 2、流数据类型必须是可序列化的 Stream 或 MemoryStream
   // /3、传递时消息体(Message Body)中不能包含其他数据,即参数中只能有一个System.ServiceModel.MessageBodyMember
   /**//// 
   /// WCF.ServiceLib.Message.FileWrapper
   [OperationContract]
   void UploadFile(FileWrapper fileWrapper);
   }
  }
  

  Streamed.cs

 

 using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Text;
  
  using System.ServiceModel;
  using System.IO;
  
  namespace WCF.ServiceLib.Message
  {
   /**//// 
   /// IStreamed类
   /// 
   public class Streamed : IStreamed
   {
   /**//// 
   /// 上传文件
   /// 
   /// WCF.ServiceLib.Message.FileWrapper
   public void UploadFile(FileWrapper fileWrapper)
   {
   var sourceStream = fileWrapper.FileData;
  
   var targetStream = new FileStream(fileWrapper.FilePath,
   FileMode.Create,
   FileAccess.Write,
   FileShare.None);
  
   var buffer = new byte[4096];
   var count = 0;
  
   while ((count = sourceStream.Read(buffer, 0, buffer.Length)) > 0)
   {
   targetStream.Write(buffer, 0, count);
   }
  
   targetStream.Close();
   sourceStream.Close();
   }
   }
  }

#31


我看这个没分包,那个UploadFile执行了一次,一次性把sr都传了.

#32


他这个如果不封包,那么还不如我直接传个大的STRING过去算了,我觉得这个和传一个大的STRING字符串绝对不同,他传了一个STREAM对象,然后对方可以慢慢读取,那么每次一定传输的数据量不大,我猜测的,如果没区别,我一次性的在自己的端都读成STRING,再传过去算了

#33



    while ((count = sourceStream.Read(buffer, 0, buffer.Length)) > 0)
   {
   targetStream.Write(buffer, 0, count);
   }

这个过程只是接收到客户端的全部数据后,才分包写到文件里的,也不是分包传输.

#34


string和stream还是有区别的,string传输时,wcf实际上还要序列化为byte[],而stream本身就是可变的长度可变的byte[]数组,更有利于传输。

#35


你这么说,难道在传输的过程中没分包?我看起来好像是每次最多传输4096 BYTE吧,至于收到后怎么管理,就不是我要问的事了,我就是问,这个过程,和我在发送端直接把所有的都存入一个字符串变量,然后当参数传过去,有什么不同?

#36


你的方法只执行了一次,就肯定没有分包,4096时节收到整个stream后分包卸到文件里的。
你直接传输string完全可以的。

#37


再问个问题,WCF服务中,每次实例的创建是要耗时间的,有哪些方法可以预想把一些数据固化,不随实例创建而创建,用PUBLIC SHARED 创建一个数组,可以吗?

#38


WCF中,用DATASET的GETXML方法得到的字符串,和自己用XML组合,得到的字符串,哪个更小?

#39


引用 37 楼 ssss8111 的回复:
再问个问题,WCF服务中,每次实例的创建是要耗时间的,有哪些方法可以预想把一些数据固化,不随实例创建而创建,用PUBLIC SHARED 创建一个数组,可以吗?

对,我用C#是采用static来避免新对象,应该和vb的SHARED一个意思吧

#40


引用 38 楼 ssss8111 的回复:
WCF中,用DATASET的GETXML方法得到的字符串,和自己用XML组合,得到的字符串,哪个更小?

这个我不了解。我一般是自定义类的序列化方法,然后直接传byte[]数组。

#41


有什么好方法把这些STATIC 数组 设置初始值?

#42


想问一下,wcf服务端地址如何动态部署

推荐阅读
  • 图像因存在错误而无法显示 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • 本文介绍了响应式页面的概念和实现方式,包括针对不同终端制作特定页面和制作一个页面适应不同终端的显示。分析了两种实现方式的优缺点,提出了选择方案的建议。同时,对于响应式页面的需求和背景进行了讨论,解释了为什么需要响应式页面。 ... [详细]
  • 使用圣杯布局模式实现网站首页的内容布局
    本文介绍了使用圣杯布局模式实现网站首页的内容布局的方法,包括HTML部分代码和实例。同时还提供了公司新闻、最新产品、关于我们、联系我们等页面的布局示例。商品展示区包括了车里子和农家生态土鸡蛋等产品的价格信息。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 本文介绍了在Python中使用zlib模块进行字符串的压缩与解压缩的方法,并探讨了其在内存优化方面的应用。通过压缩存储URL等长字符串,可以大大降低内存消耗,虽然处理时间会增加,但是整体效果显著。同时,给出了参考链接,供进一步学习和应用。 ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • ***byte(字节)根据长度转成kb(千字节)和mb(兆字节)**parambytes*return*publicstaticStringbytes2kb(longbytes){ ... [详细]
author-avatar
michael
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有