WCF报错System.BadImageFormatException的解决方案

在一个WCF Service Library中,如果引用了一些32bit的dll,我们称这个WCF Service Library依赖于x86。在调试过程中,也必须将其工程编译属性调整为x86。但如果我们的编译环境是64位,运行可能就会报错BadImageFormatException:

这是因为WCF Service Library是一个dll,必须放在容器中执行,在vs调试中使用了WcfSvcHost.exe来作为一个临时容器。它位于vs安装目录下的Common7\IDE\WcfSvcHost.exe。由于系统环境是64位,所以安装vs的时候就会自动设置WcfSvcHost.exe为64位,所以当WcfSvcHost.exe运行32位dll时才会报错。解决这个问题可以使用Corflags命令.

corflags命令的详细介绍可以参考这里。它可以将程序设置在32位下工作:

操作步骤:

阅读更多

WPF使用MediaElement方法介绍

在WPF或Silverlight中使用MediaElement控件可以方便的制作一个视频音频播放器。

首先制作一个UserControl:

代码如下:

1
2
3
4
5
6
7
8
9
10
11
<DockPanel Height="387">
<StackPanel Orientation="Horizontal" DockPanel.Dock="Bottom">
<Button Height="23" HorizontalAlignment="Left" Margin="16,0,0,10" x:Name="btnPlay" VerticalAlignment="Bottom" Width="75" Click="btnPlay_Click">播放</Button>
<Button Height="23" HorizontalAlignment="Left" Margin="16,0,0,10" x:Name="btnPause" VerticalAlignment="Bottom" Width="75" Click="btnPause_Click">暂停</Button>
<Label Content="音量:"/>
<Slider x:Name="sldVolumn" Value="{Binding Volume, ElementName=mePlayer, Mode=TwoWay, UpdateSourceTrigger=Default}" Maximum="1" LargeChange="0.1" SmallChange="0.01" Width="124" />
<Label Content="进度:"/>
<Slider x:Name="sldProgress" Minimum="0" Value="{Binding ElementName=mePlayer, Path=Position, Mode=TwoWay, Converter={StaticResource PrgConverter}}" LargeChange="10" Width="192" />
</StackPanel>
<MediaElement DockPanel.Dock="Top" Margin="16,23,12,39" x:Name="mePlayer" LoadedBehavior="Manual" MediaOpened="mePlayer_MediaOpened" />
</DockPanel>
阅读更多

.Net程序间的通讯与控制

如果有一个需求,用一个程序控制另一个程序,最简单的,比如用程序A打开程序B,这个想必平时都会用到,可以使用Process类及相关的方法。那么在打开B的时候发送一些参数,然后B根据这些参数做出一些反映,这该怎么实现?其实还是用Process。

发送端:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

static void Main(string[] args)
{
Console.WriteLine("请输入接收器路径:");
string path = Console.ReadLine();
Console.WriteLine("请输入接收器启动参数:");
string para = Console.ReadLine();
ProcessStartInfo pi = new ProcessStartInfo();
pi.FileName = @path;
pi.Arguments = para;

try
{
Process.Start(pi);
}
catch
{
Console.WriteLine("找不到接收器或出现错误!");
}
Console.ReadKey();
}

接收端:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
static void Main(string[] args)
{
if (args.Length == 0)
{
Console.WriteLine("未接到信息!");
}
else
{
foreach (string s in args)
{
Console.WriteLine(s);
}
}

Console.ReadKey();
}
阅读更多

.Net委托详解

【什么是委托】

  • 委托是对函数的引用,它是一个引用类型,类似c/cpp中的函数指针。但它是类型安全的。
  • 委托是一个类,定义了方法的类型,可以将方法当做另一个方法的参数传递。

委托就是一个安全的函数指针,用来执行函数方法的东西。


【如何使用委托】

阅读更多

Jekyll建站后简单的SEO

Jekyll在Github上建站之后发现即使提交给搜索引擎,也很难被收录或者能被搜索到。如果使用JekyllBootstrapper,已经做了相关的SEO,所以问题不大。但如果是使用其他主题分享或者自己写一个theme,那么就不得不考虑一下SEO的相关问题了。虽然我也从未接触过SEO,不过查阅一些资料,折腾一番还是有收获的。

其中受益于掌心的这篇文章,特别感谢。


提示:为了文章正常显示,取消了代码中解析site或page属性的双大括号,以及if语句中的大括号加百分号。


阅读更多

SQLServer游标指南

【什么是游标】

SQLServer是关系型数据库,在关系型数据库中,我们处理的对象都是面向集合的。假设我们有一个Tabel叫Test,id是主键,如下图左所示,当我们用SELECT TOP 5 [id],[name] FROM [Test] 执行时,会得到右图所示的数据集,这个数据集就是我们关注的对象。

抛开数据库中的游标不说,我们先看看下面这个东西:

阅读更多

WCF基础知识与实例

一、 WCF是什么?

Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口。

二、 WCF是用来做什么的?

WCF就是用来通信的。它集合了多种平台,多种协议,多种方式收发客户和服务之间的消息。

例子:我们在windows下玩网络游戏,每一个操作都会通过网络传给服务器,服务器可能是windows也可能是Unix,它接收到这个操作命令,处理后反馈给我们。接收,处理,反馈,这中间的部分就是WCF的用途。

阅读更多

常用C#设计模式(下)

【代理模式】

描述:给某一个对象提供一个代理,并由代理对象控制对原对象的引用。

在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。举几个例子,用户提供食材和菜名,“不想”自己做菜,给厨师,厨师就是一个代理。国内用户访问facebook会被墙,代理可以绕开GFW并将请求结果返回。

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public interface IRequest
{
// Methods
string Request(string sourceIp,string targetIp);
}

class GFW : IRequest
{
public string Request(string sourceIp, string targetIp)
{
if (sourceIp=="国内ip" && targetIp == "敏感ip")
{
return "404错误";
}
else
{
return "请求成功";
}
}
}

class Proxy : IRequest
{
GFW gfw = new GFW();

public string Request(string sourceIp, string targetIp)
{
sourceIp = "代理ip";
return gfw.Request(sourceIp, targetIp);
}
}

//调用
GFW gfw = new GFW();
Console.Write(gfw.Request("国内ip", "敏感ip"));

//Proxy p = new Proxy();
//Console.Write(p.Request("国内ip", "敏感ip"));
阅读更多

常用C#设计模式(中)

【装饰模式】

描述:动态地给一个对象添加一些额外的职责。

有些时候我们需要给某个对象增加一些新的特性,使用继承机制是一种有效的方法,但是不够灵活。因为如果我们要使用继承扩展一个类,就必须要在编译的时候定义这个扩展的类,这是所谓的静态,也是强类型语言的特点。这时候可以使用装饰模式。

例子:

Weapon类

阅读更多

常用C#设计模式(上)

DP是coding中经常谈到的问题,虽然DP种类繁多,但是常用的DP不过几种,这里将浅析C#常用的设计模式。

【单例模式】

描述:最“简单”的设计模式,顾名思义,这个类型只有一个实例,不能创建其他实例。这个类型提供一个公共的访问点让用户操作这个实例。

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Single
{
public void Print()
{
System.Console.Write("I am a singleton.");
}

private Single()
{

}

private static Single mySingle = new Single();

public static Single MySingle
{
get { return mySingle = new Single(); }
}

}
阅读更多