2011-08-03 29 views
1

其實我的目標是;如何在Web用戶控件中使用來自GAC的dll

  1. 創建asp.net web服務(WS命名空間,類服務)
  2. 從Web服務
  3. 創建DLL安裝此DLL GAC
  4. 創建ASP.NET Web應用程序
  5. 不要在GAC中添加此dll的引用
  6. 創建Web用戶控件而不在文件後面添加任何代碼
  7. 在Web用戶控件內編寫代碼以使用Web服務上面創建的(不提及應用)

問題是;

  1. 可以在裏面GAC Web應用程序searchs組裝即使 組件不參考應用
  2. 我可以使用這個網絡 用戶控件(在這種情況下UC不會被編譯,因爲它不是't code behinded)在WebParts等其他項目中?

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> 
... 

我編譯網頁出現了這個錯誤: enter image description here

回答

0

我已經學習併發布到my blog

首先,我們需要從web服務生成的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 

我們將部署我們的Web服務的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的全名
%GACUTIL% /l servis.dll 

in .ascx文件我們可以寫這些lin es到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(); 
2

My objective is;

  1. Create asp.net web service (namespace ws, class Service1)
  2. Create dll from web service
  3. Install this dll to GAC

aaaaaaahhhhhh!

爲什麼需要在運行時將組件安裝到GAC?這沒有好處!

對於你的問題的答案是肯定的 - 你可以自己加載程序集,或者直接使用類似Assembly.Load的東西,或者間接地通過(例如)創建一個嘗試使用程序集加載類型的頁面合格的類型名稱。