WCF的几种寄宿方式
1、 WCF服务的控制台程序寄宿
namespace WcfService_HostConsole { class Program { static void Main(string[] args) { try { ServiceHost serviceHost = new ServiceHost(typeof(Service1)); if (serviceHost.State != CommunicationState.Opened) { serviceHost.Open(); } Console.WriteLine("WCF 服务正在运行......"); Console.WriteLine("输入回车键 <ENTER> 退出WCF服务"); Console.ReadLine(); serviceHost.Close(); } catch (Exception ex) { Console.WriteLine(ex); } } } }
2、WCF服务的Winform程序寄宿
namespace WcfService_HostWinform { public partial class FrmMain : Form { ServiceHost serviceHost = null; BackgroundWorker worker = null; public FrmMain() { InitializeComponent(); worker = new BackgroundWorker(); worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted); worker.DoWork += new DoWorkEventHandler(worker_DoWork); if (!worker.IsBusy) { textBox1.Text = "正在启动......"; worker.RunWorkerAsync(); } } void worker_DoWork(object sender, DoWorkEventArgs e) { try { serviceHost = new ServiceHost(typeof(Service1)); if (serviceHost.State != CommunicationState.Opened) { serviceHost.Open(); } e.Result = "正常"; } catch (Exception ex) { e.Result = ex.Message; } } void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { if (e.Result != null) { if (e.Result.ToString() == "正常") { textBox1.Text = "服务正在进行侦听......"; } else { textBox1.Text = string.Format("错误:{0}", e.Result); } } } } }
3、 使WCF服务支持GET方式调用
namespace WcfServiceForWinform { [ServiceContract] public interface IService1 { [OperationContract] void DoWork(); [OperationContract] [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json)] string GetData(int value); } }
namespace WcfServiceForWinform { [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] public class Service1 : IService1 { public void DoWork() { } public string GetData(int value) { return string.Format("You entered: {0}", value); } } }
<?xml version="1.0"?> <configuration> <system.web> <compilation debug="true"/> </system.web> <system.serviceModel> <services> <service name="WcfServiceForWinform.Service1" behaviorConfiguration="ServiceConfig"> <endpoint address="" binding="webHttpBinding" bindingConfiguration="webHttpBindingWithJsonP" behaviorConfiguration="webHttpBehavior" contract="WcfServiceForWinform.IService1"> </endpoint> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> <host> <baseAddresses> <add baseAddress="http://localhost:9000/Service1/" /> </baseAddresses> </host> </service> </services> <bindings> <webHttpBinding> <binding name="webHttpBindingWithJsonP" crossDomainScriptAccessEnabled="true" /> </webHttpBinding> </bindings> <behaviors> <endpointBehaviors> <behavior name="webHttpBehavior"> <webHttp/> </behavior> </endpointBehaviors> <serviceBehaviors> <behavior name="ServiceConfig"> <serviceMetadata httpGetEnabled="True" policyVersion="Policy15"/> <serviceDebug includeExceptionDetailInFaults="False"/> </behavior> </serviceBehaviors> </behaviors> <serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> </system.serviceModel> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> </startup> </configuration>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现