我正在编写WCF服务,我将服务类拆分为多个部分类文件,因此每个ServiceContract-Implementation都会获得自己的文件。我有一个文件但是应该包含例如每个部分类文件(如记录器)使用的成员。如果这有任何问题,该服务将由IIS 7托管。
部分班级档案1
<ServiceBehavior(NameSpace:= WCFHelper.SERVICENAMESPACE, AddressFilterMode:= AddressFilterMode.Any)> _
Partial Public Class DataService
#Region "Members"
Private Shared m_Log As log4net.ILog = log4net.LogManager.GetLogger(GetType(DataService))
#End Region
End Class
部分类文件2 (剪掉不必要的代码以保持示例简单)
Partial Public Class DataService
Implements IContractAssets
<SomeCustomAttribute()> _
Public Function GetData(ByVal ID As Int64) As SomeCustomClass Implements IContractAssets.GetData
Try
Return SomeFunction(ID)
Catch ex As Exception
m_Log.Error("SomeError.", ex)
ThrowFault()
End Try
End Function
End Class
代码编译很好,但在运行时我得到一个BC30451: The name m_Log is not declared
错误(不知道确切的单词。我收到德语消息;))。我不认为它与m_Log或依赖程序集的类型有关,因为如果我尝试使用String,我会得到相同的错误。
我做错了什么?我怎样才能做到这一点?
编辑:我在一个简单的控制台应用程序中尝试相同的事情没有任何问题。 :(
答案 0 :(得分:2)
最后我想出了导致这个错误的原因。
不幸的是我认为将第二个分类文件放入App_Code
目录是个好主意。嗯,不是! :)我将文件移动到根目录后一切正常。
将部分类文件放在不同的目录中似乎本身并不是问题,因为它可以与另一个子目录一起使用。只有当其中一个文件位于App_Code
目录(或其他ASP.NET文件夹中,我没有尝试过)时,它才会起作用。