花了一周时间才终于连上了,把点经验分享一下,大家就不用太蛋疼没资料了。
首先需要先去世纪互联运营的azure1块钱注册个账号,再新建个ServiceBus。
我们要连接的中继是不可以使用工具创建的,只能通过代码API来进行连接。
首先新建一个类库,来建立WCF所使用的协议,实现等。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ServiceModel;
namespace CommonEn
{
[ServiceContract]
public interface IProblemSolver
{
[OperationContract]
int AddNumbers(int a, int b);
}
public interface IProblemSolverChannel : IProblemSolver, IClientChannel { }
public class ProblemSolver : IProblemSolver
{
public int AddNumbers(int a, int b)
{
return a + b;
}
}
}
这个需要添加一个引用集。
好了。现在建立两个控制台项目,分别作为服务程序和客户端程序。我们需要先安装Nuget。这个自己弄去。在服务器项目引用上右键:选择管理Nuget程序包。在搜索栏输入Windows Azure Service Bus,安装排在第一的Microsoft Azure ServiceBus。
客户端也要安装。现在打开服务器的app.config文件,我们会发现多了好多东西。不用理它们。有强迫症的可以把它们折起来。在“/system.serviceModel”上面,我们加入下面的代码:
<services>
<service name="CommonEn.ProblemSolver">
<endpoint contract="CommonEn.IProblemSolver"
binding="netTcpRelayBinding"
address="sb://feiwusihao.servicebus.chinacloudapi.cn/solver"
behaviorConfiguration="sbTokenProvider"/>
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="sbTokenProvider">
<transportClientEndpointBehavior>
<tokenProvider>
<sharedAccessSignature keyName="RootManageSharedAccessKey" key="pLmSBt3TuWvgJUxtNcESNhR5VKHZrayvemNSJuzdzoo=" />
</tokenProvider>
</transportClientEndpointBehavior>
</behavior>
</endpointBehaviors>
</behaviors>
key什么的我也不改了,大家好做一个参考。在azure门户里找到这页:点击连接信息,把自己的信息粘出来。例如我的就是:Endpoint=sb://feiwusihao.servicebus.chinacloudapi.cn/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=pLmSBt3TuWvgJUxtNcESNhR5VKHZrayvemNSJuzdzoo=
对照着这个你应该就能看懂上面的配置文件什么意思了。把自己的改了就行。最重要的是在app.config下面还有这么一块。
<appSettings>
<!-- Service Bus specific app setings for messaging connections -->
<add key="Microsoft.ServiceBus.ConnectionString"
value="Endpoint=sb://feiwusihao.servicebus.chinacloudapi.cn/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=pLmSBt3TuWvgJUxtNcESNhR5VKHZrayvemNSJuzdzoo="/>
</appSettings>
这个最好全部粘贴覆盖,不要只改名称空间和key,这样你会连到国外去而失败。中国的域名里加了china。恶心吧。
现在开始main函数。
static void Main(string[] args)
{
ServiceHost sh = new ServiceHost(typeof(ProblemSolver));
sh.Open();
Console.WriteLine("Press ENTER to close");
Console.ReadLine();
sh.Close();
}
如果你全部都照着做了,你再去门户中继那里,界面会是这样的:
这样就说明你的服务器成功了。
再配置客户端的config文件。
它与服务器的配置其它是一样的,只要把services节点换为client。如下:
<client>
<endpoint name="solver" contract="CommonEn.IProblemSolver"
binding="netTcpRelayBinding"
address="sb://feiwusihao.servicebus.chinacloudapi.cn/solver"
behaviorConfiguration="sbTokenProvider"/>
</client>
现在再写客户端main函数:static void Main(string[] args)
{
var cf = new ChannelFactory<IProblemSolver>("solver");
var ch = cf.CreateChannel();
Console.WriteLine(ch.AddNumbers(4, 5));
}
先启动服务器,不要关,再启动客户端,实验效果如下:
恭喜你,成功了!
代码参考了:http://www.windowsazure.cn/zh-cn/develop/net/how-to-guides/service-bus-relay/
示例的
issuerName="owner"不对,需要修改,特别是config文件最下方还有个配置,那个文章根本没提。搞的晕乎乎的弄了半天还不知道错哪里了。
但是感觉那个有几个地方配置不大对。