账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    C# 外部WCF服务库如何获取系统数据库连接?
    • 2020-01-01 00:00
    • 10
    14
    0

    外部WCF服务库获取不到系统内部的数据库连接!以下称之为EntityManager.

    我创建了一个外部的WCF服务库,然后将WCF服务库寄宿在Windows Service上进行部署。当我在系统内通过Form直接访问Form相关Task的时候,我可以直接在Task中获取到系统的EntityManager,从而在接口内部去实现数据库相关操作。

    我现在遇到的问题是:当我的WCF服务库作为一个外部库进行部署时,将不会有系统Form去直接调用接口实现的Task,我自然也没法获得系统内部的EntityManager。这也就导致了我的接口无法完整运行。

    当我用Form表单直接执行LoginJobTask可以获取到EntityManager,但是当整个WCF服务库单独部署出去的时候,我就获取不到了!

    [SampleManagerTask("LoginJobTask")] // 将当前类标记为Task
        public class LoginJobTask : SampleManagerTask // SampleManagerTask为所有Task的父类,数据库操作对象(下文中的EntityManager)也来自这个父类,
        {
    
            public string LoginSingleJobByWorkflow(string json)
            {
                
                ResponseSingle resp = ResponseUtil.GetDefaultResponse();
                try
                {
                    string errMsg = string.Empty;
                    // 校验Json数据是否合法
                    if (!JsonUtil.IsValid(json))
                    {
                        errMsg = string.Format("{0} JSON Data:{1}", ExceptionConstant.INVALID_JSON_DATA, json);
                        Logger.Error(errMsg);
                        return JsonUtil.ObjectToJsonStr(new ResponseSingle("", ResponseUtil.CODE_FAIL, ExceptionConstant.INVALID_JSON_DATA, errMsg));
                    }
                    // 将Json字符串转化为Json对象
                    JObject jObject = JsonUtil.JsonStrToJsonObject(json);
    
                    // 获取Type
                    JToken type = jObject[WebInterfaceWorkflowConfigPropertyNames.Type];
                    // 判断Type字段信息
                    if (JsonUtil.IsEmpty(type))
                    {
                        errMsg = string.Format("Property {0} do not exist.", WebInterfaceWorkflowConfigPropertyNames.Type);
                        Logger.Error(errMsg);
                        return JsonUtil.ObjectToJsonStr(new ResponseSingle("", ResponseUtil.CODE_FAIL, errMsg, errMsg));
                    }
    
                    // 获取调用Workflow的配置信息
                    IQuery queryWorkflowConfig = EntityManager.CreateQuery(TableNames.WebInterfaceWorkflowConfig);
                    queryWorkflowConfig.AddEquals(WebInterfaceWorkflowConfigPropertyNames.Type, type.ToString());
                    queryWorkflowConfig.AddAnd();
                    queryWorkflowConfig.AddEquals(WebInterfaceWorkflowConfigPropertyNames.Removeflag, false);

    因为系统的底层实现以及大量源码都是美国人研发的,并且都做了封装。所以我现在也不清楚系统底层到底是如何往Task中注入EntityManager的。但是我觉得如果各位前辈有做过类似独立WCF服务库开发的,可能也会遇到类似问题,所以在此提问,看能否获得一些提示或启发。谢谢各位前辈!

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部