其实我的目标是;
问题是;
PS:我的最后一个情况: Service1.asmx.cs:
using System.Web.Services;
namespace ws
{
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
public class Service1 : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
}
}
WebUserControl1.ascx:
<%@ Control Language="C#" ClassName="wuc" %>
<script runat="server">
protected override void CreateChildControls()
{
base.CreateChildControls();
ws.Service1 srv = new ws.Service1();
btn.Text = srv.HelloWorld();
}
</script>
<asp:Button runat="server" ID="btn" Text="asdasd" />
Default.aspx:
...
<%@ Register src="WebUserControl1.ascx" tagname="WebUserControl1" tagprefix="uc1" %>
...
<form id="form1" runat="server">
<div>
<uc1:WebUserControl1 ID="WebUserControl11" runat="server" />
</div>
</form>
...
我编译了,网页出现了这个错误:
答案 0 :(得分:2)
我的目标是;
- 创建asp.net Web服务(名称空间ws,类Service1)
- 从网络服务创建dll
- 将此dll安装到GAC
醇>
Aaaaaaahhhhhh!
为什么需要在运行时将程序集安装到GAC?!这个没有好处!
对于你的两个问题的答案是肯定的 - 你可以自己加载程序集,直接使用Assembly.Load之类的东西,或间接地(例如)创建一个试图加载类型的页面使用程序集限定类型名称。
答案 1 :(得分:0)
我已经学习并发布到my blog。
首先我们需要从webservice生成dll:
@SET WSDL="c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\wsdl.exe"
%WSDL% /language:cs /out:c:\temp\servis.cs http://localhost:85/WebService1.asmx?WSDL
我们将把我们的webservice的dll部署到GAC。所以我们需要有snk文件。我们将从cs创建dll文件,但在我们需要创建snk之前。
@SET SN="c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\sn.exe"
%SN% -k c:\temp\servis.snk
现在我们可以从cs文件生成dll
@SET CSC="c:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe"
%CSC% /target:library /out:c:\temp\servis.dll c:\temp\servis.cs /keyfile:C:\temp\servis.snk
现在我们可以将此dll部署到GAC
@SET GACUTIL="c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\gacutil.exe"
%GACUTIL% -if c:\temp\servis.dll
我们可以在GAC中学习dll的FullName
%GACUTIL% /l servis.dll
在.ascx文件中,我们可以将这些行写入script runat=server
标记
string sFullName = "servis, version=1.0.0.0 publickeytoken=asdhfasdfjk2323"
string sClass = "Service1"
object instance = Activator.CreateInstance(sFullName, sClass).Unwrap();
Type tip = instance.GetType();
MethodInfo mi = tip.GetMethod("HelloWorld");
object result = mi.Invoke(instance,null);
string sResult = result.ToString();