WFC的服务单绑定的问题

Eniak 2012-09-16 02:34:45
正在看 《Essential WFC》 里面有个讲义没有实现,就是第二掌的 ServiceContract , 就是客户端和服务端实现 Duplex 的这一部分。我明白其中的工作原理,就是代码调试不同,每次建立 ServiceHost 之后,准备 Open 的时候,总是告诉说 两个Endpoint 绑到一起了。

我对些 App.config 不是很熟悉,把代码贴上来,好心人帮我看看吧。另外,我没有吧服务端放到IIS上面,就是点击Debug按钮,程序就自动跑起来的。


namespace Server
{
class Program
{
// 启动服务器
static void Main(string[] args)
{
ServiceHost serviceHost = new ServiceHost(typeof(StockService));//, new Uri("http://localhost:8000/EssentialWCF"));
//serviceHost.AddServiceEndpoint(typeof(IStockService), new BasicHttpBinding(),"");
/*
ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();
behavior.HttpGetEnabled = true;
serviceHost.Description.Behaviors.Add(behavior);

serviceHost.AddServiceEndpoint
(typeof(IMetadataExchange),
MetadataExchangeBindings.CreateMexHttpBinding(),
"mex");
*/
serviceHost.Open();

Console.WriteLine("Press <Enter> to terminate. \n\n");
Console.ReadLine();


serviceHost.Close();
}
}
}



设置文件

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<services>
<service name="Server.StockService"
behaviorConfiguration="MEXServiceTypeBehavior">
<host>
<baseAddresses>
<add baseAddress="http://localhost:8000/EssentialWCF"/>
</baseAddresses>
</host>
<endpoint address="mex"
binding="basicHttpBinding"
contract="Server.IStockService"/>
<endpoint address = "mex"
binding = "wsDualHttpBinding"
contract = "IMetadataExchange"/>
</service>
</services>

<behaviors>
<serviceBehaviors>
<behavior name="MEXServiceTypeBehavior">
<serviceMetadata httpGetEnabled="true"/>
</behavior>
</serviceBehaviors>
</behaviors>

</system.serviceModel>
</configuration>



一些用到的类的代码


/*********************************************************************************/
namespace Server
{
class StockService : IStockService
{
public static Hashtable workerTable = new Hashtable();

public double GetPrice(string ticker)
{
return 94.58;
}

public void RegisterForUpdates(string ticker)
{
Worker w = null;

if (!workerTable.ContainsKey(ticker))
{
w = new Worker();
w.ticker = ticker;
w.workerProcess = new Update();
w.workerProcess.ticker = ticker;
workerTable[ticker] = w;

Thread t = new Thread( new ThreadStart(w.workerProcess.SendUpdateToClient));
t.IsBackground = true;
t.Start();
}

w = (Worker)workerTable[ticker];
IClientCallBack c = OperationContext.Current.GetCallbackChannel<IClientCallBack>();
lock (w.workerProcess.callbacks)
w.workerProcess.callbacks.Add(c);
}
}
}


/*********************************************************************************/
namespace Server
{
[ServiceContract(CallbackContract = typeof(IClientCallBack))]
public interface IStockService
{
[OperationContract]
double GetPrice(string ticker);
}

public interface IClientCallBack
{
[OperationContract(IsOneWay = true)]
void PriceUpdate(string ticker, double price);
}
}


/*********************************************************************************/
namespace Server
{
public class Update
{
public string ticker;
public List<IClientCallBack> callbacks = new List<IClientCallBack>();

public void SendUpdateToClient()
{
Random w = new Random();
Random p = new Random();

while(true)
{
Thread.Sleep(w.Next(5000));

lock(callbacks)
foreach (IClientCallBack c in callbacks)
{
try
{
c.PriceUpdate("msft", 100.00 + p.NextDouble());
}
catch (Exception ex)
{
Console.WriteLine("Error sending cache to client:{0}", ex.Message);
}
}
}
}
}
}


/*********************************************************************************/
namespace Server
{
public class Worker
{
public string ticker;
public Update workerProcess;
}
}


...全文
69 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
cszcgdn 2012-09-16
  • 打赏
  • 举报
回复
好 啊
JAVA图书馆书库管理系统设计(WORD论文+源代码) JAVA是INTERNET开发的一个强大的工具,它是一个C++的简化版本。JAVA是一门"简的、面向对象的、强类型的、编译型的、结构无关的、多线程(multi-threaded)的、垃圾自动收集的、健壮的、安全的、可扩展的语言。本系统使用的是美国微软公司的MICROSOFT VISUAL J++6.0。 MICROSOFT VISUAL J++6.0是用于JAVA编程的WINDOWS集成环境。在Visual J++中,用户可以创建、修改、编译、运行、调试和封装应用程序,所有这些操作都在一的环境中进行。 Visual j++6.0介绍Java的Windows基础类(WFC),这个新的应用程序框架访问Microsoft Windows API,允许用户用Java编成语言编写全特性的Winndows应用程序。WFC 也包装在Internet Explorer 4.0中执行的动态HTML对象模型,这就让用户能够动态地操作在客户和服务器两者上的HTML。用户可以很方便地在Visual J++内访问数据。通过添加WFC数据控件在Forms Designer中的窗体上,可以快速配置数据检索和显示的方式。Visual J++通过ActiveX Data Object(ADO, ActiveX数据对象)控件来访问数据,这是用于WFC应用程序的数据编程模块。ADO对象的内核包含Connection(连接)、Command(命令)和Recordset(记录集)对象,利用它们,可以连接到数据库和检索记录集。ADO还提供DataSource组件,该组件将Conntect,Command和Recordset对象的功能组合到一起。ADO通过DataBinder组件支持数据绑定。该组件从Recordset或DataSource组件中绑定字段到WFC控件的属性中。

110,536

社区成员

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

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

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