在AxWebBrowser控制元件裡面讓網頁與客戶端互動(wcf或ComVisible)
阿新 • • 發佈:2018-11-19
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);