1 使用Wcf暴露服务
[ServiceContract]
public interface IOperateSevice
{
/// <summary>
/// 保存信息到InsuranceClient主程序
/// </summary>
/// <param name="res"></param>
/// <param name="curInsCompInfo"></param>
[OperationContract]
void SaveInfo(compAndChannelResponse[] res, InsCompInfo curInsCompInfo);
}
2 注册服务暴露在进程里面
public static IOperateSevice GetSevice()
{
NetNamedPipeBinding binding = new NetNamedPipeBinding(NetNamedPipeSecurityMode.None);
binding.MaxReceivedMessageSize = 2147483647;
binding.CloseTimeout = TimeSpan.FromMinutes(3);
binding.OpenTimeout = TimeSpan.FromMinutes(3);
binding.ReceiveTimeout = TimeSpan.FromMinutes(3);
binding.SendTimeout = TimeSpan.FromMinutes(3);
EndpointAddress addr = new EndpointAddress("net.pipe://localhost/Client/WCFSevice");
ChannelFactory<IOperateSevice> cf = new ChannelFactory<IOperateSevice>(binding, addr);
return cf.CreateChannel();
}
3 直接通过js调用
方法二
(1)在webBrowser 里面和网页交互
1 在被调用方法类上加上[ComVisible(true)]标签,意思就是当前类可以com组件的形式供外包调用
[ComVisible(true)]
public partial class WebBrowserForm{
}
2 使用pubilc公开方法提供js调用
public void xmpf(string name)
{
messageBox.Show(name);
}
3 在类的构造函数里加载页面代码:
public WebBrowserForm()
{
InitializeComponent();
string pathName = Application.StartupPath + "\\" + "test.html";
this.webBrowser2.ObjectForScripting = this;
webBrowser2.Navigate(pathName);
}
4 使用js调用
window.external.xmpf(obj.name,obj.value, obj.checked);
(2)在AxWebBrowserForm与网页交互
1在被调用方法类上加上[ComVisible(true)]标签,意思就是当前类可以com组件的形式供外包调用,并赋予别名
再通过ComDefaultInterface指定公开的接口类型
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None), ProgId("myExtension"), ComDefaultInterface(typeof(InsuranceHelper.NativeMethods.IExtension))]
public partial class AxWebBrowserForm:IExtension
{
}
2 公开类型IExtension
[ComVisible(true), Guid("4C1D2E51-018B-4A7C-8A07-618452573E42"), InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IExtension
{
[DispId(1)]
void Submit(string tNo);
}
3 在form里面添加public此类型的方法
void IExtension.Submit(string tNo)
{
}
4 在js里面添加
window.myExtension.Submit(tNo);