问题1:我们怎么建立一个wcf程序
我们可以通过wcf服务建立 ,这种形式的创建方式,供外届调用时需要用到IIS服务器配置工具.
程序建立之后 ,删除她提供的IService1.cs 和Service1.svc 里面有我们不需要的代码
添加我们自己的服务
添加成功后,会生成对应的接口文件,和实现文件.
//接口
[ServiceContract]
public interface IMyService
{
[OperationContract]//每个接口方法之前都要写
void DoWork();
}
//实现
public class MyService : IMyService
{
public void DoWork()
{
}
}
我们还可以建立winfrom方式建立wcf
得到一个基础的winform应用
如上前一种情况添加wcf服务之后
这使得app.config 会发生一些变化
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="WindowsFormsApplication1.MyService">
<endpoint address="" binding="basicHttpBinding" contract="WindowsFormsApplication1.IMyService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8733/Design_Time_Addresses/WindowsFormsApplication1/MyService/" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
</configuration>
里面的 baseAddress 是我们即将要发布到的地方,最常见的就是你接口程序所处的ip,以及分配的端口,这个地址是我们自己决定的,可以随意修改(前提要是可用的)
如果想要自定义baseAddress 例如我不叫 MyService , 我想换一个名字
需要在serviceMetaData结里面添上 httpsGetUrl="https://localhost:8733/yourname"
并将includeExceptionDetailInFaults 改为 true
这些之后还要开启我们的服务,双击From进入代码编辑页
在From1_Load 里面添加(命名空间System.ServiceModel)
private void Form1_Load(object sender, EventArgs e)
{
ServiceHost test_host = null;
MyService t = new MyService();
try
{
test_host = new ServiceHost(t);
test_host.Open();
}
catch(Exception ex)
{
string a = ex.Message;
}
}
由于new ServiceHost(t)的要求我们要在,接口实现文件class的前面这行代码
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
这时候就可以在baseAddress提供的链接下加上?wsdl访问到服务配置文件了
问题2:wcf程序中我们有那些文件需要编辑
当我们建立wcf程序时会出现两个cs文件 接口文件 和 接口的实现文件
在接口文件中我们只需要关注生名我们的接口方法 并在方法前 添加 [OperationContract] (如他举得列子dowork 一样)
实现文件中,处理接口对应的逻辑和存取数据库
//接口
[ServiceContract]
public interface IMyService
{
[OperationContract]//每个接口方法之前都要写
void DoWork();
}
//实现
public class MyService : IMyService
{
public void DoWork()
{
}
}
问题三:怎么使用wcf服务
wcf服务会自动生成一个wsdl文件,我们引用此文件就能够访问接口了
右键 引用 - > 添加服务器引用
填写wsdl地址,如果是提供给外网的话,应该写服务器所在的ip地址,如果路径正确的话就能在新程序中以 所填命名空间的名字,作为类名访问接口方法了