Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 部署步骤';收回解决方案';:&书信电报;类别>;无法反序列化,因为它没有公共默认构造函数_C#_Sharepoint_Sharepoint 2010_Timer Jobs - Fatal编程技术网

C# 部署步骤';收回解决方案';:&书信电报;类别>;无法反序列化,因为它没有公共默认构造函数

C# 部署步骤';收回解决方案';:&书信电报;类别>;无法反序列化,因为它没有公共默认构造函数,c#,sharepoint,sharepoint-2010,timer-jobs,C#,Sharepoint,Sharepoint 2010,Timer Jobs,我用这个例子来创建一个计时器作业 这是我的计时器作业代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.SharePoint.Administration; using Microsoft.SharePoint; namespace CalcAnnualConsumptionTotals { public class Group

我用这个例子来创建一个计时器作业

这是我的计时器作业代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint.Administration;
using Microsoft.SharePoint;

namespace CalcAnnualConsumptionTotals
{
    public class GroupAnnualConsumption : SPJobDefinition
    {
        public GroupAnnualConsumption() : base() {} // <-- public default constructor

        public GroupAnnualConsumption(string jobName, SPService service, 
               SPServer server, SPJobLockType lockType)
               : base(jobName, service, server, lockType)
        {
            this.Title = "Group Annual Consumption";
        }

        public GroupAnnualConsumption(string jobName, SPWebApplication webapp)
            : base(jobName, webapp, null, SPJobLockType.ContentDatabase)
        {
            this.Title = "Group Annual Consumption";
        }

        public override void Execute(Guid targetInstanceId)
        {
            .....
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用Microsoft.SharePoint.Administration;
使用Microsoft.SharePoint;
命名空间CalcAnnualConsumptionTotals
{
公共类GroupAnnualConsumption:SPJobDefinition
{
公共组年度消费():base(){}/来自:

您还需要调用web服务关联 构造函数或来自的服务应用程序关联构造函数 您的计时器作业定义的构造函数之一。请记住,您的计时器 作业必须与这两个实体之一关联。只有 可以从上的构造函数创建关联 SPJobDefinition类,因此必须有一个构造函数 与调用相应的基本构造函数相关联

似乎需要从默认构造函数中设置这两个属性中的一个。如果可以将值传递给其他构造函数中的一个,这将是最简单的

Edit:为了澄清这一点,我认为将
jobname
参数传递给基本构造函数就足够了。如果您无法访问该值(是硬编码的,还是在配置文件中?),则可能需要重新构造

也就是说,我从未使用过Sharepoint,因此我可能会偏离基准。

看来Sharepoint作业的“旧版本”仍在运行

部署SharePoint作业时,必须重新启动

如何通过PowerShell重新启动SharePoint计时器服务

function Restart-SPTimerV4()
{
  [array]$servers= Get-SPServer | ? {$_.Role -eq "Application"}            
  $farm = Get-SPFarm            
  foreach ($server in $servers)            
  {            
     Write-Host "Restarting Timer Job on $server"                                      
     $Service = Get-WmiObject -Computer $server.name Win32_Service -Filter "Name='SPTimerV4'"                        
     if ($Service -ne $null)                         
     {                             
        $Service.InvokeMethod('StopService',$null)            
        Start-Sleep -s 7            
        $service.InvokeMethod('StartService',$null)                             
        Start-Sleep -s 7            
        Write-Host "Timer Job successfully restarted on $server"                        
     }             
     else            
     {            
        write-host -ForegroundColor Yellow "Could not find SharePoint 2010 Timer Service on $server"            
     }            
  }
}

好的,问题就在这里。正如我在问题中已经提到的

…当我第一次遇到这个错误时,我实际上忘记了添加默认构造函数

因此,发生的情况是,解决方案部署在SharePoint上,但错误也是第一次出现的(无法回忆是否是同一个错误)。下次我更正错误并尝试部署时,它向我显示了错误:

部署步骤“收回解决方案”中出错: CalcAnnualConsumptionTotals.GroupAnnualConsumption不能为空 反序列化,因为它没有公共默认构造函数

收回解决方案是此处的关键字。当SharePoint尝试部署更新的解决方案时,它必须收回旧的解决方案,但由于(旧)解决方案中的错误而无法收回


因此,我去中央管理局管理农场解决方案并删除了该解决方案。然后,当我部署时,它起了作用。

上述方法对我不起作用,但我确实找到了一个解决方案,并希望在这里发布,以防其他人遇到同样的情况

在我的情况下,我无法通过Manage Farm Solutions(管理场解决方案)页面卸载,至少一开始无法

我必须首先通过添加默认构造函数来修复代码。然后,我必须使用gacutil对文件进行GAC。然后,我使用iisreset/restart重置IIS。只有这样,我才能在“管理场解决方案”页面中请求收回解决方案

不幸的是,然后它就停在那里了。所以,为了解决这个问题,我做了:

  • stsadm-o枚举部署
  • stsadm-o canceldeployment-id“步骤1中显示的guid值”
  • 通过powershell:删除spsolution-Identity solutionname.wsp-force
  • iisreset/restart(重新部署过程中可能会出现错误,除非手动跳出iis,否则解决方案仍在安装)

  • 然后我可以重新部署并重新开始工作。

    我也找到了这个链接。但是我如何从计时器作业定义的构造函数中调用web服务关联构造函数或服务应用程序关联构造函数呢我是SharePoint的新手。我终于发现了这个问题,并将其发布为。谢谢你的帮助。我对SharePoint了解得越多,就越不想处理它。我终于发现了这个问题,并将其发布为。谢谢你的帮助。谢谢,这对我帮助很大。我知道这已经有一段时间了,但这个答案仍然有效,并且仍然适用SP2013的谎言。刚才有这个问题。它也有助于将重建的DLL部署到gac中。